安装Hive3.1.2
Posted 刘元涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装Hive3.1.2相关的知识,希望对你有一定的参考价值。
下载地址:https://downloads.apache.org/hive/hive-3.1.2/
解压在指定目录
tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive3.1.2
修改/etc/profile.d/my_env.sh,添加环境变量
#HIVE_HOME
export HIVE_HOME=/opt/module/hive3.1.2
export PATH=$PATH:$HIVE_HOME/bin
3.1.2版本执行bin/schematool -dbType derby -initSchema的时候会报一个错误:
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
删除掉hive里面的guava-19.0.jar,将hadoop里面的guava-27.0-jre.jar复制到hive里即可。
默认的hive使用内置的derby,不好用,这里修改为mysql。
vim $HIVE_HOME/conf/hive-site.xml
<!--jdbc连接的URL-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value><![CDATA[jdbc:mysql://139.199.106.57:3306/hive_metastore?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&tinyInt1isBit=false]]></value>
</property>
<!--jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!--jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>pupbook</value>
</property>
<!--jdbc连接的password-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>pbFeZ^SCWmKg@Jar</value>
</property>
<!--Hive元数据存储版本的验证-->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
初始化 Hive 元数据库 schematool -initSchema -dbType mysql -verbose
完整的hive-site.xml的配置
<configuration>
<!--jdbc连接的URL-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value><![CDATA[jdbc:mysql://139.199.106.57:3306/hive_metastore?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&tinyInt1isBit=false]]></value>
</property>
<!--jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!--jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>pupbook</value>
</property>
<!--jdbc连接的password-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>pbFeZ^SCWmKg@Jar</value>
</property>
<!--Hive元数据存储版本的验证-->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!--Hive默认在HDFS的工作目录-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node101:9083</value>
</property>
<!-- 打印表头 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 打印当前库 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node101</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
创建hive启动脚本 vim ~/bin.myhive.sh
#!/bin/bash
HIVE_LOG_DIR=/data_disk/hive/logs
# 配置hive日志目录
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 /opt/module/hive3.1.2/bin/hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
cmd=$cmd" sleep 3; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup /opt/module/hive3.1.2/bin/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 3
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 +x myhive.sh
以上是关于安装Hive3.1.2的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu下安装Hive3.1.2教程(附MySQL安装方法及安装包)
Ubuntu下安装Hive3.1.2教程(附MySQL安装方法及安装包)
基于Hadoop3.1.2集群的Hive3.1.2安装(有不少坑)