本教程适用于初学者安装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的用户名和密码
三、启动Hive 1、 初始化元数据库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
1)登陆MySQL
mysql -uroot -p123456
2)新建Hive元数据库
mysql> create database metastore;
mysql> quit;
3)初始化Hive元数据库
2.5.2 启动Hive 1)先启动hadoop集群schematool -initSchema -dbType mysql -verbose
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) 启动hiveserver2hive --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了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)