本教程适用于初学者安装hive学习使用,很多配置,需要个人在后续的学习与使用中探索来掌握。
一、首先要安装MySQL原因:Hive默认使用的元数据库为derby,开启Hive之后就会占用元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。以我们需要将Hive的元数据地址改为MySQL,可支持多窗口操作。
MySQL的安装可以参考我的另一篇博客
CentOS7安装mysql8_tianqin_9169的博客-CSDN博客
二、Hive安装 1、下载hive包Index of /dist/hivehttp://archive.apache.org/dist/hive/
根据自己需求,选择想用的版本的包进行下载,我这几就以3.1.2为例,hadoop版本用的3.1.3
下载完成后进行 解压,配置环境变量--步骤省略
2、Jar包冲突因为跟hadoop的jar包存在冲突,主要有两个jar包冲突,一个log4j-slf4j-impl-2.10.0.jar跟hadoop冲突,可以删除,我这里就打个标记弃用。
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
另一个时guava-19.0.jar,跟hadoop里面的guava-27.0-jre.jar冲突,采用高版本替换低版本的方式。
3、将MySQL的JDBC驱动拷贝到Hive的lib目录下cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
rm $HIVE_HOME/lib/guava-19.0.jar
我这里选用的8.0.16自己可以选择版本去下载
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.16
4、配置metastore到MySql
在$HIVE_HOME/conf目录下新建hive-site.xml文件,根据自己的情况更在主机名,mysql的用户名和密码
vim $HIVE_HOME/conf/hive-site.xml
javax.jdo.option.ConnectionURL jdbc:mysql://hadoop001:3306/metastore?useSSL=false javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 hive.metastore.warehouse.dir /user/hive/warehouse hive.metastore.schema.verification false hive.metastore.event.db.notification.api.auth false hive.metastore.uris thrift://hadoop102:9083 hive.server2.thrift.bind.host hadoop102 hive.server2.thrift.port 10000
三、启动Hive
1、 初始化元数据库
1)登陆MySQL
mysql -uroot -p123456
2)新建Hive元数据库
mysql> create database metastore;
mysql> quit;
3)初始化Hive元数据库
schematool -initSchema -dbType mysql -verbose
2.5.2 启动Hive
1)先启动hadoop集群
start-dfs.sh
start-yarn.sh
start-dfs.sh
start-yarn.sh
启动hadoop集群后,要等hdfs退出安全模式之后再启动hive。
2)启动Hive
使用hive命令启动hive
hive
[tianqin@hadoop101 ~]$ hive which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/zookeeper-3.5.7/bin:/opt/module/kafka_2.11-2.4.1/bin:/opt/module/eagle/bin:/opt/module/flume-1.9.0//bin:/opt/module/sqoop-1.4.6/bin:/opt/module/hive-3.1.2//bin:/opt/module/hbase-2.0.5//bin:/opt/module/phoenix-5.0.0/bin:/opt/module/spark-yarn/bin:/opt/module/spark-yarn/sbin:/opt/module/kylin/bin:/opt/module/flink-1.12.2//bin:/home/tianqin/.local/bin:/home/tianqin/bin) Hive Session ID = 23b58961-615b-445a-a8de-d5dbfd47974f Logging initialized using configuration in jar:file:/opt/module/hive-3.1.2/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. hive (default)>
这种状态表示启动成功,接下来就可以HiveSQL操作了。
3) 启动hiveserver2
hive --service hiveserver2
hive --service hiveserver2
这里会需要一会时间大概要2-3分钟左右,而且会阻塞窗口。
4)启动beeline客户端
另开一个窗口,输入一下命令启动beeline客户端,连接hive.这里tianqin是我的user,hadoop101是我的主机名。
beeline -u jdbc:hive2://hadoop101:10000 -n tianqin
[tianqin@hadoop101 conf]$ beeline -u jdbc:hive2://hadoop101:10000 -n tianqin Connecting to jdbc:hive2://hadoop101:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://hadoop101:10000>
这种状态表示启动成功,可以使用hivesql操作了。
想要通过外部的客户端连接hive就需要开启hiveserver2
四、编写启动脚本前面也看到了,开启hiveserver2服务会阻塞窗口,为了方便启停hiveserver2,我们来编写一个脚本。
vim $HIVE_HOME/bin/myhive.sh
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数2为进程端口
function check_process()
{
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
echo $pid
[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
metapid=$(check_process Hivemetastore 9083)
cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
[ -z "$metapid" ] && eval $cmd || echo "metastroe服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动"
}
function hive_stop()
{
metapid=$(check_process Hivemetastore 9083)
[ "$metapid" ] && kill $metapid || echo "metastore服务未启动"
server2pid=$(check_process HiveServer2 10000)
[ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动"
}
case $1 in
"start")
hive_start
;;
"stop")
hive_stop
;;
"restart")
hive_stop
sleep 2
hive_start
;;
"status")
check_process Hivemetastore 9083 >/dev/null && echo "metastore服务运行正常" || echo "metastore服务运行异常"
check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac
chmod 777 $HIVE_HOME/bin/myhive.sh
到此就可以练习使用hive了!



