1. Hive安装部署
1)上传安装包到服务器对应目录
2)解压 apache-hive-3.1.2-bin.tar.gz 到 /opt/module/ 目录下面
tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
3)重命名解压目录,并配置软链接
mv apache-hive-3.1.2-bin/ hive-3.1.2
ln -s /opt/module/hive-3.1.2/ /opt/module/hive
4)修改环境变量,并source环境变量,使生效
vim /etc/profile
# 添加如下配置
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
# source环境变量,使生效
source /etc/profile
5)解决日志Jar包冲突,进入/opt/module/hive/lib目录
cd /opt/module/hive/lib/
mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak
2. Hive元数据配置到MySQL
2.1. 拷贝驱动
将MySQL的JDBC驱动拷贝到Hive的lib目录下
cp /opt/software/mysql-connector-java-5.1.37.jar /opt/module/hive/lib/
2.2. 配置Metastore到MySQL
1)在$HIVE_HOME/conf目录下新建hive-site.xml文件
vim /opt/module/hive/conf/hive-site.xml
2)添加如下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bigdata1:3306/metastore?useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Yangshibiao123456.</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>bigdata1</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</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>
</configuration>
3. 初始化元数据库
1)登陆MySQL
mysql -uroot -pYangshibiao123456.
2)新建Hive元数据库
create database metastore;
quit;
3)初始化Hive元数据库
schematool -initSchema -dbType mysql -verbose
在数据库中有如下表即成功初始化:
4. 启动Hive客户端并使用
# 启动hive客户端
hive
# 使用hivesql
show databases;
show tables;
create table test (id int);
insert into test values(1);
select * from test;
5. 使用元数据服务的方式访问 Hive
1)在 hive-site.xml 文件中添加如下配置信息
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://bigdata1:9083</value>
</property>
2)启动 metastore
hive --service metastore
注意: 启动后窗口不能再操作,需打开一个新的 shell 窗口做别的操作
在一个新的窗口启动hive
6. 使用 JDBC 方式访问 Hive
1)在 hive-site.xml 文件中添加如下配置信息
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>bigdata1</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
注意:上述配置文件中已有,不需要添加了
2)启动 hiveserver2
hive --service hiveserver2
3)启动 beeline 客户端(需要多等待一会)
beeline -u jdbc:hive2://bigdata1:10000 -n hive
# 上述的hive用户可以填随意用户
注意:上述连接可能报错,此时需要在 hadoop 的 core-site.xml 配置文件中配置如下配置:
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
当看到如下界面,即启动成功:
Connecting to jdbc:hive2://bigdata1: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://bigdata1:10000>
7. 编写hive一键脚本
vim/root/bin/hiveservices.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 &"
[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup 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
添加对应权限,即可通过该脚本操作hive服务