1. 引入
Hudi 0.6.0版本之前隻支援将Hudi表同步到Hive或者相容Hive的MetaStore中,對于雲上其他使用與Hive不同SQL文法MetaStore則無法支援,為解決這個問題,近期社群對原先的同步子產品hudi-hive-sync進行了抽象改造,以支援将Hudi表同步到其他類型MetaStore中,如阿裡雲的資料湖分析DLA(https://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()
表示通過DLASyncTool進行同步,與HiveSyncTool同步至Hive功能類似;org.apache.hudi.dla.DLASyncTool
-
表示同步至DLA中的資料庫名;hoodie.datasource.dla_sync.database
-
表示同步至DLA中的表名;hoodie.datasource.dla_sync.table
-
表示連接配接DLA的使用者名;hoodie.datasource.dla_sync.username
-
表示連接配接DLA的密碼;hoodie.datasource.dla_sync.password
-
表示連接配接DLA的JDBC連接配接;hoodie.datasource.dla_sync.jdbcurl
-
表示同步至DLA的分區字段;hoodie.datasource.dla_sync.partition_fields
-
表示同步至DLA的分區值解析器;hoodie.datasource.dla_sync.partition_extractor_class
除了上述配置外,還需要在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連接配接配置可參考如下連結:https://help.aliyun.com/document_detail/110829.html。配置完後即可在Spark寫入Hudi時自動将Hudi表同步至DLA,同步結果如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0AjNzITN5UzNtYzN4YDMwATOxATM4ADMyAjMtMTN5YTM28CX4ADMyAjMvw1M1kjNxYzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
查詢表結果如下:
為友善使用者直覺感受到将Hudi表同步到DLA,可參考這裡https://help.aliyun.com/document_detail/173653.html直接運作對應Jar包來快速建構基于Hudi和DLA的資料湖。
5. 總結
可以看到基于最新的Hudi版本,使用者可自定義Hudi表同步MetaStore邏輯,同時隻需要非常簡單的配置即可完成自動同步,并且以同步至DLA為例,給出了關鍵配置,該功能将在近期釋出的0.6.0版本中釋出。
PS:如果您覺得閱讀本文對您有幫助,請點一下
“推薦”按鈕,您的
,将會是我不竭的動力!
作者:
leesf 掌控之中,才會成功;掌控之外,注定失敗。出處:http://www.cnblogs.com/leesf456/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如果覺得本文對您有幫助,您可以請我喝杯咖啡!