Oceanus环境Flinksql默认10分钟一批数据文件。
hive创建表
USE testdb; CREATE TABLE `hive_table` ( `id` int, `name` string) PARTITIONED BY (`dt` string, `hr` string) STORED AS ORC;
Kerberos 认证授权
登录集群 Master 节点,获取 krb5.conf、emr.keytab、core-site.xml、hdfs-site.xml、hive-site.xml 文件,路径如下。
/etc/krb5.conf /var/krb5kdc/emr.keytab /usr/local/service/hadoop/etc/hadoop/core-site.xml /usr/local/service/hadoop/etc/hadoop/hdfs-site.xml /usr/local/service/hive/conf/hive-site.xml
修改 hive-site.xml 文件。在 hive-site.xml 中增加如下配置,IP 的值取配置文件中 hive.server2.thrift.bind.host 的 value。
<property> <name>hive.metastore.uris</name> <value>thrift://ip:7004</value> </property>
获取 hivemetastore-site.xml 和 hiveserver2-site.xml,点击文件名下载。
对获取的配置文件打 jar 包。
jar cvf hive-xxx.jar krb5.conf emr.keytab core-site.xml hdfs-site.xml hive-site.xml hivemetastore-site.xml hiveserver2-site.xml
校验 jar 的结构(可以通过命令查看 vim hive-xxx.jar),jar 里面包含如下信息,请确保文件不缺失且结构正确。
META-INF/ META-INF/MANIFEST.MF emr.keytab krb5.conf hdfs-site.xml core-site.xml hive-site.xml hivemetastore-site.xml hiveserver2-site.xml
在 程序包管理 页面上传 jar 包,并在作业参数配置里引用该程序包。
获取 Kerberos principal,用于作业 高级参数 配置。
klist -kt /var/krb5kdc/emr.keytab
# 输出如下所示,选取第一个即可:
hadoop/172.28.28.51@EMR-OQPO48B9 KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 2 08/09/2021 15:34:40 hadoop/172.28.28.51@EMR-OQPO48B9 2 08/09/2021 15:34:40 HTTP/172.28.28.51@EMR-OQPO48B9 2 08/09/2021 15:34:40 hadoop/VM-28-51-centos@EMR-OQPO48B9 2 08/09/2021 15:34:40 HTTP/VM-28-51-centos@EMR-OQPO48B9
作业 高级参数 配置。
containerized.taskmanager.env.HADOOP_USER_NAME: hadoop containerized.master.env.HADOOP_USER_NAME: hadoop security.kerberos.login.principal: hadoop/172.28.28.51@EMR-OQPO48B9 security.kerberos.login.keytab: emr.keytab security.kerberos.login.conf: ${krb5.conf.fileName}
注意:
历史 Oceanus 集群可能不支持该功能,您可通过 在线客服 联系我们升级集群管控服务,以支持 Kerberos 访问。
注意事项
如果 Flink 作业正常运行,日志中没有报错,但是客户端查不到这个 Hive 表,可以使用如下命令对 Hive 表进行修复(需要将 hive_table_xxx 替换为要修复的表名)。
msck repair table hive_table_xxx; -- 测试,不需要执行,就可以识别数据
Flinksql写hive表,成功后,自动识别数据,无需msck
Oceanus环境Flinksql默认10分钟一批数据文件。
CREATE TABLE datagen_source_table ( id INT, name STRING, log_ts TIMESTAMP(3), WATERMARK FOR log_ts AS log_ts - INTERVAL '5' SECOND ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '10' ); CREATE TABLE hive_table ( `id` INT, `name` STRING, `dt` STRING, `hr` STRING ) PARTITIONED BY (dt, hr) with ( 'connector' = 'hive', -- Flink 1.13 请使用 'connector' = 'hive' 'hive-version' = '3.1.1', 'hive-database' = 'test', 'partition.time-extractor.timestamp-pattern'='$dt $hr:00:00', 'sink.partition-commit.trigger'='partition-time', 'sink.partition-commit.delay'='10 s', 'sink.partition-commit.policy.kind'='metastore,success-file' ); -- streaming sql, insert into hive table INSERT INTO hive_table SELECT id, name, DATE_FORMAT(log_ts, 'yyyy-MM-dd'), DATE_FORMAT(log_ts, 'HH') FROM datagen_source_table;
浙公网安备 33010602011771号