2.Hive基础—Hive 元数据配置到 MySQL、使用 (元数据服务) 和 (JDBC) 的方式访问 Hive


2.5 Hive 元数据配置到 MySQL

2.5.1 拷贝 Jar

  • MySQLJDBC 驱动拷贝到 Hivelib 目录下
[xqzhao@hadoop100 mysql-libs]$ cp mysql-connector-java-5.1.27-bin.jar $HIVE_HOME/lib

2.5.2 配置 MetastoreMySQL

注:需要确保已经启动 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
这里可能是用户权限问题,需要修改Hadoopetc/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

页川叶川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值