为什么创建Hudi表没有在DLI控制台上显示?
问题描述
使用Flink SQL语句创建的Hudi表未在DLI控制台显示无法通过控制台对该表进行管理和查询操作。
根因分析
DLI控制台的数据管理默认使用的是Hive Catalog,而Hudi表的元数据没有正确同步到Hive Catalog中。Hudi表的元数据管理是独立于Hive的,因此需要额外的配置来确保Hudi表的元数据能够被Hive Catalog识别和同步。
解决方案
Hudi表持久化是指将Hudi表的元数据和数据信息同步并保存到Hive的元数据存储中,以便 Hive 能够识别和管理这些表。
- SQL作业
如果仅使用SQL来操作Hudi数据,通常不需要配置额外的“持久化参数”,因为SQL作业本身已经提供了对Hudi数据的读写支持。
- Flink OpenSource SQL作业
为了将Hudi表的元数据持久化到DLI的数据管理(Hive Catalog),需要在创建Hudi表时添加一些特定的配置参数,这些参数用于通知Hudi将元数据同步到Hive Catalog。
详细参数说明如表1所示。
在DLI使用Hudi提交Flink SQL作业且配置,配置hive_sync相关参数,实时同步元数据至由DLI的操作示例请参考在DLI使用Hudi提交Flink SQL作业。
表1 创建Hudi结果表时配置的持久化参数 参数名称
参数描述
hive_sync.enable
是否启用向Hive同步表信息。
当你需要将Hudi表的元数据同步到 Hive元数据存储中,以便通过Hive查询工具或在DLI控制台的数据管理中访问Hudi表时,需要将此参数设置为 true。
- true:Hudi 将会把表的元数据(如表结构、分区信息等)同步到 Hive 中。
- false:不会向Hive同步表信息。
开启向hive同步表信息后会使用catalog相关权限,还需配置访问catalog的委托权限。
hive_sync.mode
Hudi表元数据同步到Hive的方式
根据你的环境和需求选择合适的同步模式。
- jdbc:通过JDBC连接到 Hive Server来同步元数据。
- hms:通过Hive Meta Client 直接与Hive Metastore交互来同步元数据。
- hiveql:通过执行Hive QL语句来同步元数据。
hive_sync.table
同步到Hive的表名称,Hudi表的元数据将同步到这个Hive表中
hive_sync.db
同步到Hive的数据库名称,Hudi表的元数据将同步到这个Hive数据库中的表。
hive_sync.support_timestamp
是否支持时间戳,用于确保Hudi表的元数据同步到Hive时能够正确处理时间戳字段。
建议配置为True。
- Spark jar作业
在Spark jar中操作Hudi数据时,也需要配置一些参数来实现持久化和同步到Hive。
详细参数说明如表2所示。
在DLI使用Hudi提交Spark Jar作业且开启作业同步配置的示例请参考在DLI使用Hudi提交Spark Jar作业。
表2 Spark Jar作业同步Hive表参数配置 参数
描述
默认值
hoodie.datasource.hive_sync.enable
是否同步hudi表信息到Hive。当使用DLI提供的元数据服务时,配置该参数代表同步至DLI的元数据中。
建议该值设置为true,统一使用元数据服务管理hudi表。
true
hoodie.datasource.hive_sync.database
要同步给Hive的数据库名。
default
hoodie.datasource.hive_sync.table
要同步给Hive的表名,建议和hoodie.datasource.write.table.name的值保证一致。
unknown
hoodie.datasource.hive_sync.partition_fields
用于确定Hive分区列。
""
hoodie.datasource.hive_sync.partition_extractor_class
用于提取hudi分区列值,将其转换成Hive分区列。
org.apache.hudi.hive.SlashEncodedDayPartitionValueExtractor
hoodie.datasource.hive_sync.support_timestamp
当hudi表存在timestamp类型字段时,需指定此参数为true,以实现同步timestamp类型到hive元数据中。
该值默认为false,默认将timestamp类型同步为bigInt,默认情况可能导致使用sql查询包含timestamp类型字段的hudi表出现错误。
true
hoodie.datasource.hive_sync.fast_sync
Hudi同步Hive分区方式:
- true:从最近一次hive同步后所修改的分区直接向Hive表中做add partition if not exist操作。
- false:会根据修改的分区去hive表查询是否已存在,不存在的进行添加。
true
hoodie.datasource.hive_sync.mode
hudi表同步Hive表的方式,在使用DLI提供的元数据服务时需要保证为hms:
- hms:通过hive metastore client同步元数据。
- jdbc:通过hive jdbc方式同步元数据。(DLI元数据服务不支持)
- hiveql:执行hive ql方式同步元数据。(DLI元数据服务不支持)
hms
hoodie.datasource.hive_sync.username
使用jdbc方式同步Hive时,指定的用户名。
hive
hoodie.datasource.hive_sync.password
使用jdbc方式同步Hive时,指定的密码。
hive
hoodie.datasource.hive_sync.jdbcurl
连接hive jdbc指定的连接。
""
hoodie.datasource.hive_sync.use_jdbc
是否使用Hive jdbc方式连接Hive同步Hudi表信息。建议该值设置为false,设置为false后jdbc连接相关配置无效。
true