Flink SQL 1.12.3 通过 sql-client 访问 hive 元数据。

前言

我尽可能的会把使用的细节写的详细一点,为后来的小伙伴节约点时间。

一、问题

  • 如果用 sql-client.sh 来提交无法保存元数据,每次创建的表都在一个 session 中,而这个 session 保存在内存中。我们每次重启 sql-client.sh 后,元数据都会丢失。每次重新创建非常麻烦,flink 提供了一种选择, 让我们可以读取 hive 元数据。
  • 也就是我们 hive 中的表都可以通过 sql-client.sh 来读取。这对实现流批一体,和元数据的一致性也很有好处。

二、原理解析

在这里插入图片描述
Hive 的真实数据是存储在 HDFS 上的。
Hive 的元数据是存储在 Mysql 中的。
我们要提供服务去访问元数据,那么就需要启动两个服务,一个是 Metastore,另外一个是 HiveServer2。
Metastore 是提供 Hive Cli 访问元数据的服务。
HiveServer2 是提供给第三方 Client 访问的服务, HiveServer2 通过再通过 Metastore 访问 Mysql。
整个的 Hive 元数据访问流程如下:

Flink Sql Client ⟹ HiveServer2 ⟹ Metastore ⟹ Mysql

三、实战

选择的版本

  • Mysql 5.7
  • Flink 1.12.3
  • Hive 3.1.2
  • Hadoop 3.1.3

其中选择版本的时候一定要记住对应的版本,然后下载 jar 包不要下载错了。

1. 配置 Hadoop 的环境变量

export HADOOP_CLASSPATH=`hadoop classpath`

测试一下
在这里插入图片描述
说明配置成功

2. hive/conf/hive-site.xml 配置

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node1: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>123456</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>node1</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>
  <property>
    <name>hive.zookeeper.quorum</name>
    <value>node1,node2,node3</value>
  </property>
  <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
  </property>
  <property>
    <name>hive.metastore.uris</name>
    <value>thritf://node1:9083</value>
  </property>
  <property>
    <name>hive.metastore.local</name>
    <value>false</value>
  </property>
  <!--Spark依赖位置-->
  <property>
    <name>spark.yarn.jars</name>
    <value>hdfs://node1:8020/spark-jars/*</value>
  </property>
  <!--Hive执行引擎-->
  <property>
    <name>hive.execution.engine</name>
    <value>spark</value>
  </property>
  <!--Hive和spark连接超时时间-->
  <property>
    <name>hive.spark.client.connect.timeout</name>
    <value>10000ms</value>
  </property>
</configuration>

主要关注的配置
因为 sql-client.sh 的启动会读取hive 的配置(hive-site.xml),然后通过 hive 的配置文件找到一些服务,所以 hive 的配置文件里面要配置下面三个配置。

① HiveServer2 的地址
通过参数 hive.server2.thrift.bind.host 配置地址
通过参数 hive.server2.thrift.port 配置端口
② Metastore 的地址
通过参数 hive.metastore.uris 配置
③ Mysql 的地址。
通过参数 javax.jdo.option.ConnectionURL 配置

3. sql-client-defaults.yaml 配置

catalogs:
  - name: flink
    type: hive
    hive-conf-dir: /opt/module/hive/conf

execution:
  planner: blink
  type: streaming
  ...
  ...
  ...
  current-catalog: flink   # 此处要和上面配置的 -name 名字一致
  current-database: default # 选择数据库。

主要通过要找到 hive 的配置文件。
通过 hive-conf-dir 来配置 hive-site.xml 的位置。

4. 启动 hive 的服务

# 先启动 metastore
nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &
# 再启动 hiveserver2
nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &

5. jar 包下载

主要有几点注意:
① flink 版本
② flink 对应的 scala 版本
③ flink 对应的 hive 版本

下载地址

Flink 官网
在这里插入图片描述

上图可以看到不同版本的 hive 对应的jar 包不一样。
libfb303 这个包不是每个 hive-exec 都有的。一定要注意。

hive-exec-3.1.0.jar
libfb303-0.9.3.jar
flink-connector-hive_2.11-1.12.3.jar
flink-shaded-hadoop-2-uber-2.8.3-9.0.jar
flink-sql-connector-hive-3.1.2_2.11-1.12.3.jar

前三个 jar 数读取 hive 元数据必须的。
第四个 jar 是 flink 操作 hadoop 的 jar。我有 2.8.3 也可以读取 hadoop 3.1.3。最新的 shaded 自己打包的时候有错误。官方现在出新的了,可以去下载新的。
最后一个 jar 可以通过 sql 读取 hive。

flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar

flink-shaded-hadoop-2-uber-2.8.3-10.0.jar

我的全部 jar 包
在这里插入图片描述

6. 启动 flink。

# 启动 Flink SQL 客户端
bin/sql-client.sh embedded

No default environment specified.
Searching for '/opt/module/flink-1.12.3/conf/sql-client-defaults.yaml'...found.
Reading default environment from: file:/opt/module/flink-1.12.3/conf/sql-client-defaults.yaml
No session environment specified.
2021-05-01 13:50:10,397 INFO  org.apache.hadoop.hive.conf.HiveConf                         [] - Found configuration file file:/opt/module/hive/conf/hive-site.xml
2021-05-01 13:50:10,567 WARN  org.apache.hadoop.hive.conf.HiveConf                         [] - HiveConf of name hive.metastore.local does not exist
2021-05-01 13:50:10,786 INFO  org.apache.hadoop.hive.metastore.HiveMetaStoreClient         [] - Trying to connect to metastore with URI thritf://node1:9083
2021-05-01 13:50:10,801 INFO  org.apache.hadoop.hive.metastore.HiveMetaStoreClient         [] - Opened a connection to metastore, current connections: 1
2021-05-01 13:50:10,814 INFO  org.apache.hadoop.hive.metastore.HiveMetaStoreClient         [] - Connected to metastore.
2021-05-01 13:50:10,814 INFO  org.apache.hadoop.hive.metastore.RetryingMetaStoreClient     [] - RetryingMetaStoreClient proxy=class org.apache.hadoop.hive.metastore.HiveMetaStoreClient ugi=lzq (auth:SIMPLE) retries=1 delay=1 lifetime=0

Command history file path: /home/lzq/.flink-sql-history

7. 在 sql-client.sh 里面查看 hive 的 catalog 和 表。

show catalogs;
# 上面的配置就是说我某人使用的 catalog 是 flink
show tables;

在这里插入图片描述

我的所有服务
在这里插入图片描述

解释一下都是 什么服务

6928 SqlClient    							# hive sql 客户端
4819 SqlClient    							# flink sql 客户端
10564 DataNode    							# hdfs datanode
6039 RunJar  	  							# org.apache.hadoop.hive.cli.CliDriver
11081 NodeManager  							# yarn
2043 RunJar        							# HiveServer2 org.apache.hive.service.server.HiveServer2
1787 RunJar									# metastore org.apache.hadoop.hive.metastore.HiveMetaStore
10763 QuorumPeerMain  						# zookeeper
10396 NameNode        						# hdfs namenode
30220 TaskManagerRunner 					# flink worker
29789 StandaloneSessionClusterEntrypoint 	# flink StandaloneSession 集群入口
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值