Hive 连接器提供对 Hive 数据源的读写能力,通过使用 Hive Catalog,Flink 可以对 Hive 表做统一的批和流处理。这意味着 Flink 可以作为 Hive 批处理引擎的另一个选择,或者流式写 Hive 表中的数据以支持实时数仓应用。
确保您已经:
前置条件:Flink 需要访问 E-MapReduce 集群,我们需要获取以下文件
配置文件的获取方式如下,在 E-MapReduce 产品集群 - 集群详情 - 节点管理 - MasterGroup - 选择第一台 Master 节点:
通过控制台远程连接或者通过公网 SSH 连接指定 Master 服务器,通过 Terminal 控制台进行访问
注意:如果通过公网 SSH 连接,则需要提前为 ECS 绑定公网 IP
可以通过如下命令行获取:
# hive conf 一般在以下这个目录 cd /etc/emr/hive/conf # 没有这个目录的话也可以尝试从环境变量中获取 env | grep HIVE_CONF_DIR
将下图中的 hive-site.xml 通过 SCP 命令拷贝到本地,或者直接 cat 文本,获取文件内容:
hdfs-site.xml操作同 hive-site.xml
另外由于有些 Hive 表的 Format 会涉及到 YARN 的类,需要视情况将 yarn-site.xml 中的配置项 yarn.resourcemanager.principal 拷贝出来添加到 hdfs-site.xml 中。
内容类似如下:
<property> <name>yarn.resourcemanager.principal</name> <value>yarn/_HOST@6C5B5406ADDF347BB8C9.EMR.COM</value> </property>
keytab 在 EMR 集群概览页面,需要创建一个用户,在用户管理这边,直接下载即可。
krb5.conf 在 /etc/krb5.conf 根目录,直接scp拷贝或者cat文本copy出来
登录 EMR 主节点,使用 Hive 终端,执行以下命令创建数据表:
-- 创建 hive 库 create database flink_test; use flink_test; -- 创建 Hive 测试表 create table flink_table (`a` int, `b` string);
步骤一:点击创建 Catalog 按钮,选择 EMR Hive 类型 Catalog,进入下一步
步骤二:填写 Catalog 名称,选择 EMR 的对应版本名称和集群名称,上传 hive-site.xml 和 hdfs-site.xml 文件,如果是 Kerberos 集群,同时需要上传 keytab 和 krb5.conf 文件
步骤三:创建成功,当前 EMR-Hive 暂时还不支持同步元数据,所以暂时无法查看所有 Hive 库表结构
步骤一:可以在 Flink SQL 中直接使用 catalog.database.table三段式方式直接访问数据表,例如写入 LAS 表的方式如下:
create table orders ( a int, b string ) WITH ( 'connector' = 'datagen', 'rows-per-second'='1' ); insert into `emr_hive`.`flink_test`.`flink_table` select a , b from orders
步骤二:保存 SQL 任务,发布并且上线
步骤三:启动任务,验证数据写入成功
在 Hive 可以观测数据写入情况。
hive> use flink_test; OK Time taken: 0.088 seconds hive> select * from flink_table limit 10; OK ... Time taken: 1.305 seconds, Fetched: 10 row(s)
现象是在创建数据目录的时候无法网络连通性测试,数据目录同步失败。
原因:当前 EMR-Hive 暂时还不支持元数据同步,暂时无法使用界面化查看库表信息
现象是使用 Flink 1.17 的时候,无法访问 Kerberos 集群的 Hive Metastore,写入任务报错。
原因:当前 Flink 1.17 暂不支持 Kerberos 集群,请使用 Flink 1.16 版本
现象是点击验证、或者上线的时候,有如下报错
原因:当前 EMR-Hive 暂时不支持快速验证、深度验证等功能。上线前请跳过深度检查