Apache Hudi表自動同步至阿里雲數據湖分析DLA
- 2020 年 8 月 10 日
- 筆記
1. 引入
Hudi 0.6.0版本之前只支援將Hudi表同步到Hive或者兼容Hive的MetaStore中,對於雲上其他使用與Hive不同SQL語法MetaStore則無法支援,為解決這個問題,近期社區對原先的同步模組hudi-hive-sync進行了抽象改造,以支援將Hudi表同步到其他類型MetaStore中,如阿里雲的數據湖分析DLA(//www.aliyun.com/product/datalakeanalytics中。
2. 抽象
將Hudi表同步至Hive MetaStore的程式碼在hudi-hive-sync模組,為兼容更多類型MetaStore,現將其改造為如下模組
hudi-sync
|-hudi-sync-common
|-hudi-hive-sync
|-hudi-dla-sync
其中各模組說明如下
- hudi-sync-common表示元數據同步公共模組,用於存放一些用於同步的公共父類;
- hudi-hive-sync表示同步Hive模組;
- hudi-dla-sync表示同步阿里雲DLA模組;
基於上述結構,用戶可基於hudi-sync-common構建自定義的元數據同步邏輯。
3. 配置
下面以DLA為例,介紹如何通過Spark寫入Hudi表後自動將Hudi表同步至DLA中,同步核心配置如下
df.write().format("hudi").
options(getQuickstartWriteConfigs()).
option(PRECOMBINE_FIELD_OPT_KEY(), "ts").
option(RECORDKEY_FIELD_OPT_KEY(), "name").
option(PARTITIONPATH_FIELD_OPT_KEY(), "location").
option("hoodie.embed.timeline.server", false).
option(TABLE_NAME, tableName).
option(TABLE_TYPE_OPT_KEY(), tableType).
option(META_SYNC_CLIENT_TOOL_CLASS(), "org.apache.hudi.dla.DLASyncTool").
option(META_SYNC_ENABLED_OPT_KEY(), "true").
option("hoodie.datasource.dla_sync.database", dbName).
option("hoodie.datasource.dla_sync.table", tableName).
option("hoodie.datasource.dla_sync.username", dlaUsername).
option("hoodie.datasource.dla_sync.password", dlaPassword).
option("hoodie.datasource.dla_sync.jdbcurl", dlaJdbcUrl).
option("hoodie.datasource.dla_sync.partition_fields", "location").
option("hoodie.datasource.dla_sync.partition_extractor_class", "org.apache.hudi.hive.MultiPartKeysValueExtractor").
mode(saveMode).
save(basePath);
關鍵配置項說明如下:
META_SYNC_CLIENT_TOOL_CLASS()
表示進行同步的類,指定為org.apache.hudi.dla.DLASyncTool
表示通過DLASyncTool進行同步,與HiveSyncTool同步至Hive功能類似;hoodie.datasource.dla_sync.database
表示同步至DLA中的資料庫名;hoodie.datasource.dla_sync.table
表示同步至DLA中的表名;hoodie.datasource.dla_sync.username
表示連接DLA的用戶名;hoodie.datasource.dla_sync.password
表示連接DLA的密碼;hoodie.datasource.dla_sync.jdbcurl
表示連接DLA的JDBC連接;hoodie.datasource.dla_sync.partition_fields
表示同步至DLA的分區欄位;hoodie.datasource.dla_sync.partition_extractor_class
表示同步至DLA的分區值解析器;
除了上述配置外,還需要在pom.xml依賴中新增hudi-dla-sync依賴(hudi.version為0.6.0-SNAPSHOT)
<dependency>
<groupId>org.apache.hudi</groupId>
<artifactId>hudi-dla-sync</artifactId>
<version>${hudi.version}</version>
</dependency>
4. 同步
上述配置中,資料庫名配置為hudi_dla_demo_db,表名配置為hudi_trips_dal_demo;其他用戶名、密碼、JDBC連接配置可參考如下鏈接://help.aliyun.com/document_detail/110829.html。配置完後即可在Spark寫入Hudi時自動將Hudi表同步至DLA,同步結果如下
查詢表結果如下:
為方便用戶直觀感受到將Hudi表同步到DLA,可參考這裡//help.aliyun.com/document_detail/173653.html直接運行對應Jar包來快速構建基於Hudi和DLA的數據湖。
5. 總結
可以看到基於最新的Hudi版本,用戶可自定義Hudi表同步MetaStore邏輯,同時只需要非常簡單的配置即可完成自動同步,並且以同步至DLA為例,給出了關鍵配置,該功能將在近期發布的0.6.0版本中釋出。