Flink 使用介绍相关文档目录
前言
Flink SQL很大程度上简化了业务的开发工作量。但是Flink默认的配置,维护表的元数据信息仍然有局限性。Flink默认使用GenericInMemoryCatalog
。所有的元数据仅在session范围内存活,一旦作业遇到故障恢复或者是停机等(session被kill掉),所有表信息都会丢失,造成很大的不便。我们需要一个稳定独立的外部组件来存储表的元数据信息。Hadoop生态系统经过多年的发展,Hive metastore事实上已成为元数据存储中心。无论Hive自身,还是Flink, Spark,都采用Hive metastore作为元数据存储。从根本上解决了上述问题。本篇为大家分享如何使用Flink连接Hive metastore并查询Hive表。
准备工作
根据需要配合使用的Hive版本,添加对应的依赖到Flink的lib
目录中。具体参见官网:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/connectors/table/hive/overview/#user-defined-dependencies。
这里以支持Hive 3.1.0为例,需要准备如下jar包:
- flink-connector-hive_2.12-1.15.0.jar
- hive-exec-3.1.0.jar
- libfb303-0.9.3.jar
- antlr-runtime-3.5.2.jar
Yaml 方式配置
Yaml方式的好处是启动Flink SQL client的时候自动加载Hive metastore的配置,不需要每次启动的时候去创建。使用起来类似于Spark SQL & Hive metastore。
编辑$FLINK_HOME/conf/sql-client-defaults.yaml
,添加如下内容:
catalogs:
- name: myhive
type: hive
default-database: default
hive-conf-dir: /usr/hdp/3.0.1.0-187/hive/conf/
配置项的解释如下:
- name: catalog名称,在Flink SQL client内执行
show catalogs;
可以查看到。 - type: catalog类型,这里需要设置为hive。表示使用Hive metastore。
- default-database: 设置该catalog为默认的catalog时候,默认使用的database。
- hive-conf-dir:
hive-site.xml
文件位置,支持使用HDFS路径,本地路径。如果使用本地路径,需要启动的时候能在本地访问到。如果不指定此配置项,Flink默认从classpath中读取Hive配置文件。
然后启动sql client:
export HADOOP_CLASSPATH=`hadoop classpath`
./sql-client.sh embedded -s yarn-session
启动的时候注意这两行日志:
Searching for '/path/to/flink_home/conf/sql-client-defaults.yaml'...found.
Reading default environment from: file:/path/to/flink_home/conf/sql-client-defaults.yaml
看到这两行日志并且启动没有异常,说明Hive catalog配置成功。
我们查看一下hive catalog是否已经被加载。执行下面SQL列出目前存在的catalog:
Flink SQL> show catalogs;
+-----------------+
| catalog name |
+-----------------+
| default_catalog |
| myhive |
+-----------------+
2 rows in set
这里myhive
就是上面配置的Hive catalog。
接下来使用下面SQL,切换到Hive catalog:
Flink SQL> use catalog myhive;
[INFO] Execute statement succeed.
然后我们找一张Hive表查询,观察是否可以获取到数据:
show tables;
select * from table_xxx;
SQL 方式配置
这种方式不需要额外的配置文件。但是每次使用Flink SQL的时候都需要创建,才可以使用。
启动SQL client的方式和上面的相同。启动成功之后,执行创建catalog的SQL语句。
CREATE CATALOG myhive WITH (
'type' = 'hive',
'default-database' = 'mydatabase',
'hive-conf-dir' = '/opt/hive-conf'
);
-- 使用myhive catalog
USE CATALOG myhive;
create catalog
语句的参数解释和上面Yaml配置文件的参数含义相同,不再赘述。
经过上面的配置,我们可以在myhive这个catalog中操作Hive表,或者是在Flink默认的default_catalog
中使用Flink表,这些表的元数据信息会存放在Hive metastore中。