FlinkSQL 整合 Hive

FlinkSQL 整合 Hive

介绍

Flink 从 1.9 开始支持集成 Hive,不过 1.9 版本为 beta 版,不推荐在生产环境 中使用。
在 Flink1.10 版本中,标志着对 Blink 的整合宣告完成,对 Hive 的集成 也达到了生产级别的要求。
这里使用的 Flink 是 1.13.0,Hive 是 3.1.2。

Flink 与 Hive 的集成方式

Flink 与 Hive 的集成主要体现在以下两个方面:
1.持久化元数据 Flink 利 用 Hive 的 MetaStore 作 为 持 久 化 的 Catalog , 我 们 可 通 过 HiveCatalog 将不同会话中的 Flink 元数据存储到 Hive Metastore 中。例如,我们可以使用 HiveCatalog 将其 Kafka 的数据源表存储在 Hive Metastore 中,这样该表的元数据信息会被持久化到 Hive 的 MetaStore 对应的元数据库中,在后续的 SQL 查询中,我们可以重复使用它们。
2.利用 Flink 来读写 Hive 的表 Flink 打通了与 Hive 的集成,如同使用 SparkSQL 或者 Impala 操作 Hive 中的 数据一样,我们可以使用 Flink 直接读写 Hive 中的表。 HiveCatalog 的设计提供了与 Hive 良好的兼容性,用户可以”开箱即用”的访 问其已有的 Hive 表。不需要修改现有的 Hive Metastore,也不需要更改表的数 据位置或分区。

具体配置

1.在环境变量/etc/profile 中添加配置:(三台节点都配置)
export HADOOP_CLASSPATH=hadoop classpath
source /etc/profile
2.下载对应的 jar,上传到 Flink 的 lib 目录下
https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/connectors/ta ble/hive/overview/
FlinkSQL 整合 Hive_第1张图片
3.将以下包都添加到flink的lib目录下
FlinkSQL 整合 Hive_第2张图片
antlr-runtime-3.5.2.jar、hive-exec-3.1.2.jar、libfb303-0.9.3.jar都是官方要求的jar包,可以从hive的lib目录下直接拷贝到flink的lib下。
guava-27.0-jre.jar不是官方要求的,但是不加的话,在启动sqlclient的时候,会报(ZLjava/lang/String;Ljava/lang/Object;)V异常。
flink-json-1.13.0.jar(为了后期使用FlinkSQL解析Json数据添加的jar包)、flink-connector-hive_2.12-1.13.0.jar、flink-sql-connector-kafka_2.12-1.13.0.jar(为了后期使用FlinkSQL读取Kafka做实时处理添加的jar包),可以通过在pom文件中添加以下依赖,先下载到maven仓库,再拖到flink的lib目录下。
4.将flink的lib目录同步分发给其他节点

<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-sql-connector-kafka_2.12</artifactId>
	<version>${flink.version}</version>
</dependency>
<dependency>
	groupId>org.apache.flink</groupId>
	<artifactId>flink-json</artifactId>
	<version>${flink.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-connector-hive_2.12</artifactId>
	<version>${flink.version}</version>
</dependency>

5.修改hive的配置文件vihive-site.xml:

<property>
	<name>hive.metastore.uris</name>
	<value>thrift://localhost:9083</value>
</property>

6.启动hive元数据服务:

nohuphive--servicemetastore&

7.修改flinksql配置:
在Flink1.13之后默认没有此配置文件了,需要从其他版本的包中拷贝,我是从flink1.12.4中拷贝的
注意:♥
catalogs:#把这里的[]删除掉

vi/usr/software/flink-1.13.0/conf/sql-client-defaults.yaml
catalogs:#把这里的[]删除掉
-name:myhive
type:hive
hive-conf-dir:/usr/software/hive-3.1.2/conf
default-database:t1#hive中已经存在的数据库

FlinkSQL 整合 Hive_第3张图片
8.启动flink集群:

start-cluster.sh

9.启动flink-sql客户端:

sql-client.shembedded

如果出现了:org.codehaus.janino.CompilerFactory cannot be cast to org.codehaus.commons.compiler.ICompilerFactory异常。
在flink-conf.yaml中修改:classloader.resolve-order:parent-first
10.查看注册的catalogs:
showcatalogs;
FlinkSQL 整合 Hive_第4张图片
11.使用注册的myhivecatalog

usecatalogmyhive;

12.查看hive的数据库:
FlinkSQL 整合 Hive_第5张图片

你可能感兴趣的:(hive,big,data)