说明安装hive之前,系统已经安装好了 java,hadoop,mysql。
版本说明
java jdk1.8
haoop 3.2.2
hive 3.1.2
目前hive官网是支持hadoop3.x 版本的,hive 版本要3.x。不然安装没法使用。
hive的安装模式有2种,一种是使用自带的derby数据库,另一种是使用mysql作为元数据库。derby方式一般没人用,因为它是单用户模式。
我这里主要讲解mysql方式。
hive仅仅是一个客户端工具,不存在集群概念,因此安装的时候无需每台机器安装,哪个节点需要使用,就安装在哪个节点上。多个节点安装的时候mysql的元数据库一定要相同(即要在同一个mysql同一个库上),否则各个客户端获取的数据不一致
下载链接:https://downloads.apache.org/hive/hive-3.1.2/
wget https://downloads.apache.org/hive/hive-3.1.2/
解压
tar -zxvf apache-hive-3.1.2-bin.tar.gz
1.修改环境变量,添加Hive环境变量
vi /etc/profile
#hive安装目录
export HIVE_HOME=/usr/local/work/hive/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile //应用变量更改
1、在目录 /usr/local/work/apache-hive-3.1.2-bin 下创建目录 tmp 来存放hive运行过程中生成的临时文件
2、启动hadoop
start-all.sh
3、在 HDFS 上创建2个文件夹
hdfs dfs -mkdir -p /usr/local/work/hive/data
#存储数据
hdfs dfs -mkdir -p /usr/local/work/hive/warehouse
给文件增加读写权限报错:
chmod: changing permissions of '/usr/local/work/hive/flwarehouse': Cannot set permission for /usr/local/work/hive/flwarehouse. Name node is in safe mode.
hadoop dfsadmin -safemode leave
4、进入目录 /soft/apache-hive-2.3.6-bin/conf 创建 文件 hive-site.xml
(该目录下默认没有 hive-site.xml 文件 ,该文件可以通过复制 hive 自带的文件 hive-default.xml.template 来创建)
cd cd /usr/local/work/hive/apache-hive-3.1.2-bin/conf
cp hive-default.xml.template hive-site.xml
5、进入目录 /soft/apache-hive-2.3.6-bin/conf 创建 文件 hive-env.sh
(该目录下默认没有 hive-env.sh 文件 ,该文件可以通过复制 hive 自带的文件 hive-env.sh.template 来创建)
cd /usr/local/work/hive/apache-hive-3.1.2-bin/conf
cp hive-env.sh.template hive-env.sh
6、将 mysql-connector-java-8.0.26.jar 传输到 apache-hive-3.1.2-bin/lib 目录下
7、在mysql下,登录root用户,更改远程权限,并创建 名称 为 hive 的 数据库
#建立数据库
create database fl_hive if not exists fl_hive;
#设置远程登录的权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#刷新配置
FLUSH PRIVILEGES;
在 /usr/local/work/hive/apache-hive-3.1.2-bin/conf 下
修改 hive-site.xml 文件,通过搜索对应配置替换你的数据。
#MySQL 连接属性
javax.jdo.option.ConnectionURL
javax.jdo.option.ConnectionDriverName
javax.jdo.option.ConnectionUsername
javax.jdo.option.ConnectionPassword
编辑这个最好吧文件拉取出来,用编辑器打开查找替换。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://xxx.xxx.48.130:3306/hive?useUnicode=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false</value>
##此处IP地址为MySQL数据库的地址,文中是用的虚拟机乙的IP地址
##因为 MySQL 8.0的要求,所以此处已经添加时区;如果你是MySQL5.0等版本,可以只填写 jdbc:mysql://192.168.48.130:3306/hive
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
##MySQL8.0版本驱动名称为 com.mysql.cj.jdbc.Driver ;如果你是MySQL5.0等版本,驱动名称为com.mysql.jdbc.Driver
</property>
<property>
## 配置用户名
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
##此处密码因人而异
</property>
#Hive 在 HDFS 上工作路径
hive.exec.scratchdir
#Hive 在存储数据时在 HDFS 中的路径
hive.metastore.warehouse.dir
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/local/work/date/soft/apache-hive-3.1.2-bin</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/local/work/hive/warehouse</value>
</property>
#HIve 临时目录路径
hive.exec.local.scratchdir
hive.downloaded.resources.dir
hive.server2.logging.operation.log.location
# 没有的文件,自己手动创建 比如 在 /usr/local/work/date/soft 创建 tmp
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/work/date/soft/apache-hive-3.1.2-bin/tmp/${user.name}</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/work/date/soft/apache-hive-3.1.2-bin/tmp/${hive.session.id}_resources</value>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/work/date/soft/apache-hive-3.1.2-bin/tmp/log/operation_logs</value>
</property>
cd /usr/local/work/hive/apache-hive-3.1.2-bin/bin
schematool -dbType mysql -initSchema
cd /usr/local/work/hive/apache-hive-3.1.2-bin/bin
./hive
1.guava 在 hadoop 和hive 的版本不一致。
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
删除hive的lib下面的guava-19.0.jar,然后拷贝hadoop下面的guava-27.0.jar即可。
2、java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
解决办法:
这是配置文件的bug.
行的注释掉 或者删除描述。
3.通过 显示启动 可以看到具体的启动信息,用来排错。
hive --service metastore &
访问hive的web ui 界面。
需要执行命令
./hive --service hiveserver2
http://ip:10002/