天天看點

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,同步結果如下

Apache Hudi表自動同步至阿裡雲資料湖分析DLA

查詢表結果如下:

Apache Hudi表自動同步至阿裡雲資料湖分析DLA
Apache Hudi表自動同步至阿裡雲資料湖分析DLA

為友善使用者直覺感受到将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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

如果覺得本文對您有幫助,您可以請我喝杯咖啡!