Hive3.1.2安装与配置
前⾔
本教程适⽤于初学者安装hive学习使⽤,很多配置,需要个⼈在后续的学习与使⽤中探索来掌握。
⼀、⾸先要安装MySQL
原因:Hive默认使⽤的元数据库为derby,开启Hive之后就会占⽤元数据库,且不与其他客户端共享数据,如果想多窗⼝操作就会报错,操作⽐较局限。以我们需要将Hive的元数据地址改为MySQL,可⽀持多窗⼝操作。
MySQL的安装可以参考我的另⼀篇博客
⼆、Hive安装
1、下载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冲突,采⽤⾼版本替换低版本的⽅式。
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
rm $HIVE_HOME/lib/guava-19.0.jar
3、将MySQL的JDBC驱动拷贝到Hive的lib⽬录下
我这⾥选⽤的8.0.16⾃⼰可以选择版本去下载
4、配置Metastore到MySql
在$HIVE_HOME/conf⽬录下新建l⽂件,根据⾃⼰的情况更在主机名,mysql的⽤户名和密码vim $HIVE_HOME/l
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop001:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value&sql.jdbc.Driver</value>
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive默认在HDFS的⼯作⽬录 -->
<property>
<name&astore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name&astore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name&astore.ification.api.auth</name>
<value>false</value>
</property>
<!-- 指定存储元数据要连接的地址 -->
<property>
<name&astore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<!-- 指定hiveserver2连接的端⼝号 -->
mysql的jar包下载<property>
<name>hive.server2.thrift.port</name>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
三、启动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
启动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/m 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 hive (default)>
这种状态表⽰启动成功,接下来就可以HiveSQL操作了。
3) 启动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了!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论