让Hudi自动同步元数据到Hive Metastore,我们需要对Hudi进行一些必要的配置,根据官方文档( https://hudi.apache.org/docs/configurations.html#hive-sync-options )给出的说明,标准的Hudi Hive Sync配置应该是这样的:
首先是最基本的三项:
DataSourceWriteOptions.HIVE_SYNC_ENABLED_OPT_KEY -> "true"
DataSourceWriteOptions.HIVE_DATABASE_OPT_KEY -> "your-target-database"
DataSourceWriteOptions.HIVE_TABLE_OPT_KEY -> "your-target-table"
这三项很容易理解,就是告诉Hudi要开启Hive Sync,同时指定同步到Hive的什么库的什么表。
此外,对于分区表需要追加以下几项:
DataSourceWriteOptions.KEYGENERATOR_CLASS_OPT_KEY -> classOf[ComplexKeyGenerator].getName
DataSourceWriteOptions.HIVE_PARTITION_EXTRACTOR_CLASS_OPT_KEY -> classOf[MultiPartKeysValueExtractor].getName
DataSourceWriteOptions.HIVE_STYLE_PARTITIONING_OPT_KEY -> "true"
DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY -> "your-partition-path-field"
DataSourceWriteOptions.HIVE_PARTITION_FIELDS_OPT_KEY -> "your-hive-partition-field"
对于非分区表需要追加以下几项:
DataSourceWriteOptions.KEYGENERATOR_CLASS_OPT_KEY -> classOf[NonpartitionedKeyGenerator].getName
DataSourceWriteOptions.HIVE_PARTITION_EXTRACTOR_CLASS_OPT_KEY -> classOf[NonPartitionedExtractor].getName
在常规Hadoop/Spark集群上,完成上述配置之后Hudi Hive Sync就可以正常工作了,但是有时你可能会遇到这样一个错误:
Cannot create hive connection jdbc:hive2://localhost:10000/
原因Hudi的Hive Sync默认是通过JDBC连接HiveServer2执行建表操作的,而jdbc:hive2://localhost:10000/
是默认的Hive JDBC连接字符串。
当你的HiveServer2地址不是localhost,或者端口不是10000时,就会报出这个错误!修复的方法也很简单,就是将配置项hive_sync.jdbc_url
(DataSourceWriteOptions.HIVE_URL_OPT_KEY
)改为你环境下的正确的服务器地址和端口。
当然,你也可以尝试另一种方式,直接禁用JDBC,例如在Glue环境下,是没有HiverServer2的,所以必须disable,即,在Hudi中添加如下配置:
DataSourceWriteOptions.HIVE_USE_JDBC_OPT_KEY -> "false"
关于Glue和Hudi有集成,请移步:AWS Glue集成Apache Hudi同步元数据深度历险(各类错误的填坑方案)
推荐:博主历时三年倾注大量心血创作的《大数据平台架构与原型实现:数据中台建设实战》一书已由知名IT图书品牌电子工业出版社博文视点出版发行,真诚推荐给每一位读者!点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,扫码进入京东手机购书页面!