本文目录如下:
2.5 Hive 元数据配置到 MySQL
2.5.1 拷贝 Jar
包
- 将
MySQL
的JDBC
驱动拷贝到Hive
的lib
目录下
[xqzhao@hadoop100 mysql-libs]$ cp mysql-connector-java-5.1.27-bin.jar $HIVE_HOME/lib
2.5.2 配置 Metastore
到 MySQL
注:需要确保已经启动
Hadoop集群
。详情可参考: Hadoop运行模式-完全分布式 中第4.8.2 小节
。
注:确保MySQL
已经启动。
- (1) 在
hive
的/conf
目录下新建hive-site.xml
文件
[root@hadoop100 hive]$ vim conf/hive-site.xml
添加如下内容:
<?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://hadoop100:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.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 元数据存储版本的验证 -->
<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>
</configuration>
- (2) 登陆
MySQL
[xqzhao@hadoop100 software]$ mysql -uroot -p123456
- (3) 新建
Hive
元数据库
mysql> create database metastore;
# 创建完成后退出
mysql> quit;
- (4) 初始化
Hive
元数据库
[xqzhao@hadoop100 software]$ schematool -initSchema -dbType mysql -verbose
# 控制台打印下列语句表示初始化成功
beeline> Initialization script completed
schemaTool completed
将
derby
数据库 更换为MySQL
数据库之后,就可以打开多个hive
客户端了。
2.6 使用元数据服务的方式访问 Hive
- (1) 在
/conf/hive-site.xml
文件中添加如下配置信息
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop100:9083</value>
</property>
- (2) 启动
metastore
[xqzhao@hadoop100 hive]$ bin/hive --service metastore
2021-08-18 08:15:39: Starting Hive Metastore Server
`注意: 启动后窗口不能再操作,需打开一个新的 shell 窗口做别的操作`
注1
: 启动过程中可能会报如下错误:org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.
上述报错的解决办法: 点击查看解决办法。
注2
: 进行第一步元数据服务配置之后,就必须先启动metastore
, 再启动hive
,否则会报错。
- (3) 启动
hive
[xqzhao@hadoop100 hive]$ bin/hive
2.7 使用 JDBC 方式访问 Hive
2.7.1 修改配置文件: hive-site.xml
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop100</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
2.7.2 启动 hiveserver2(需要等待一会)
[xqzhao@hadoop100 hive]$ bin/hive --service hiveserver2
`输出下列信息表示启动完成:`
2021-08-19 02:17:44: Starting HiveServer2
Hive Session ID = def0e9d2-2c6f-4d58-a883-9de5e0b0c0b7
Hive Session ID = d0135b0c-166c-4602-82cb-84d4e9cabf3b
Hive Session ID = d1b5a0ad-0f97-4801-aabe-3a153150a733
Hive Session ID = ae47a6a7-e5eb-4fd6-9bbc-b4e11c36db9e
注
: 启动 hiveserver2
之前要确保 metastore
已经启动。启动方法请参考本博客第 2.6小节
的描述。
2.7.3 启动 beeline 客户端
[xqzhao@hadoop100 hive]$ bin/beeline -u jdbc:hive2://hadoop100:10000 -n xqzhao
# 启动之后会输出如下信息
Connecting to jdbc:hive2://hadoop100: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
错误记录
:执行此步骤时遇到如下报错:
WARN jdbc.HiveConnection: Failed to connect to hadoop100:10000
这里可能是用户权限问题,需要修改Hadoop
的etc/hadoop/core-site.xml
文件,详情可参考:点击查看解决办法
2.7.4 编写 hive 服务启动脚本
- (1) 前台启动的方式导致需要打开多个 shell 窗口, 可以使用后台启动方式。后台启动方式如下:
[xqzhao@hadoop100 hive]$ nohup hive --service metastore 2>&1 &
[xqzhao@hadoop100 hive]$ nohup hive --service hiveserver2 2>&1 &
nohup
: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态
2>&1
: 表示将错误重定向到标准输出上。
&
: 放在命令结尾,表示后台运行。
- (2) 为了方便使用,可以直接编写shell脚本来管理服务的启动和关闭
# /opt/module/hive/bin/hiveservices.sh
[xqzhao@hadoop100 hive]$ vim 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
- (3) 添加执行权限
[xqzhao@hadoop100 hive]$ chmod 777 bin/hiveservices.sh
`移动之后便可以全局使用`
[xqzhao@hadoop100 ~]$ sudo cp bin/hiveservices.sh /bin
2.7.5 使用脚本操作 Hive 进程
`启动 Hive 后台服务`
[xqzhao@hadoop100 hive]$ hiveservices.sh start
# 启动之后要等一会才会启动成功
`查看 Hive 后台服务状态`
[xqzhao@hadoop100 hive]$ hiveservices.sh status
`关闭 Hive 后台服务`
[xqzhao@hadoop100 hive]$ hiveservices.sh stop
结语
注
:学习完本章节之后,便可以将第2.6小节
与第2.7小节
中在hive-site.xml
中添加的配置信息注释掉,以方便后续可以快速启动Hive
服务,方便学习。注释后的效果如下图所示:
注: 进行完上述步骤之后,博主使用root
身份启动Hive
报错,后将用户切换为xqzhao
之后成功启动Hive
。
声明:本文是学习时记录的笔记,如有侵权请告知删除!
原视频地址:https://www.bilibili.com/video/BV1EZ4y1G7iL