Apache Hudi表自動同步至阿里雲數據湖分析DLA


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()表示進行同步的類,指定為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連接配置可參考如下鏈接:https://help.aliyun.com/document_detail/110829.html。配置完后即可在Spark寫入Hudi時自動將Hudi表同步至DLA,同步結果如下

查詢表結果如下:

為方便用戶直觀感受到將Hudi表同步到DLA,可參考這里https://help.aliyun.com/document_detail/173653.html直接運行對應Jar包來快速構建基於Hudi和DLA的數據湖。

5. 總結

可以看到基於最新的Hudi版本,用戶可自定義Hudi表同步MetaStore邏輯,同時只需要非常簡單的配置即可完成自動同步,並且以同步至DLA為例,給出了關鍵配置,該功能將在近期發布的0.6.0版本中釋出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM