介绍
您可以在 Oceanus SQL 作业中配置 Hive Catalog、查看 Hive 元数据、使用 Hive Catalog。将元数据信息保存到 Hive Metastore 以后,在作业中无需再显式声明 DDL 语句,直接三段式引用元数据即可。
版本说明
Flink 版本 | 说明 |
1.11 | 不支持 |
1.13 | 支持 hive 版本2.2.0、2.3.2、2.3.5、3.1.1 |
1.14 | 不支持 |
前提条件
已在 Hive Metastore 侧开启了 Hive Metastore 服务。
相关命令如下:
hive --service metastore
:开启 Hive Metastore 服务。ps -ef|grep metastore
:查询 Hive Metastore 服务是否已开启。操作说明
创建 Hive Catalog
切换到
_dc
,单击新建 Hive Catalog。
上传4个配置文件 hive-site.xml ,hdfs-site.xml ,hivemetastore-site.xml ,hiveserver2-site.xml 配置文件下载,其中 hive-site.xml 中需要添加 urls 的地址。创建数据库
在 SQL 作业中可以创建数据库。数据库的写法采用两段式:
catalog_name.database_name
。CREATE DATABASE IF NOT EXISTS `hiveCatalogName`.`databaseName`;
创建数据表
在 SQL 作业中可以创建数据表。数据表的写法采用三段式:
catalog_name.database_name.table_name
。CREATE TABLE IF NOT EXISTS `hiveCatalogName`.`databaseName`.`tableName` (user_id INT,item_id INT,category_id INT,-- ts AS localtimestamp,-- WATERMARK FOR ts AS ts,behavior VARCHAR) WITH ('connector' = 'datagen','rows-per-second' = '1', -- 每秒产生的数据条数'fields.user_id.kind' = 'sequence', -- 有界序列(结束后自动停止输出)'fields.user_id.start' = '1', -- 序列的起始值'fields.user_id.end' = '10000', -- 序列的终止值'fields.item_id.kind' = 'random', -- 无界的随机数'fields.item_id.min' = '1', -- 随机数的最小值'fields.item_id.max' = '1000', -- 随机数的最大值'fields.category_id.kind' = 'random', -- 无界的随机数'fields.category_id.min' = '1', -- 随机数的最小值'fields.category_id.max' = '1000', -- 随机数的最大值'fields.behavior.length' = '5' -- 随机字符串的长度);
SQL 作业中引用 Hive Catalog 中的表
在 SQL 作业中,将光标移动到要插入的元表的位置,在左侧导航栏中找到要引用的表,点击菜单中的【引用】。
INSERT INTO`hiveCatalogName`.`databaseName`.`sink_tableName`SELECT*FROM`hiveCatalogName`.`databaseName`.`source_tableName`;
说明
同一个作业中只能引用一个 Hive Catalog。
Hive Catalog 不支持 Drop 操作。
删除 Hive Metastore
在左侧导航栏,单击 Hive Catalog 对应的删除按钮。
赋权
作业执行过程中,需要有写入 hdfs 文件的权限,目前 Oceanus 使用 Hive Catalog 元数据需要对 flink 用户进行授权。相关操作如下:
在 Hive 所在的所有 master 节点执行。
useradd flinkgroupadd supergroupusermod -a -G supergroup flinkhdfs dfsadmin -refreshUserToGroupsMappings
建议在 Hive 中开启权限,在 hive-site.xml 文件中添加如下的配置项。
<property><name>hive.metastore.authorization.storage.checks</name><value>true</value><description>Should the metastore do authorization checks againstthe underlying storage for operations like drop-partition (disallowthe drop-partition if the user in question doesn't have permissionsto delete the corresponding directory on the storage).</description><property>