Hudi 多表攝取工具 HoodieMultiTableStreamer 配置方法與示例

《大數據平臺架構與原型實現:數據中臺建設實戰》博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行,點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》了解圖書詳情,京東購書鏈接:https://item.jd.com/12677623.html,掃描左側二維碼進入京東手機購書頁面。

1. 多表公共配置和差異配置的兩種處理方式


由于 Hudi 的 HoodieMultiTableStreamer / HoodieMultiTableDeltaStreamer 是一次處理多張 Hudi 表的寫入,這些表既會有如 hoodie.deltastreamer.source.kafka.value.deserializer.class 這樣相同的公共配置,也會有如 hoodie.datasource.write.recordkey.field 這樣每張表每張表都不同的個性化配置,為此,HoodieMultiTableStreamer / HoodieMultiTableDeltaStreamer 給出的解決方案是:將公共配置提取到一個配置文件,將每張表的個性化配置放置到多個對應文件中,至于如何將每張表的表名和它的配置文件映射起來,Hudi 提供兩種方案:

方式一:

在公共配置文件中通過 hoodie.deltastreamer.ingestion.<db>.<table>.configFile 顯式指定 <db>.<table> 對應的配置文件,以下是一個示例:

hoodie.deltastreamer.ingestion.tablesToBeIngested=db1.table1,db2.table2
hoodie.deltastreamer.ingestion.db1.table1.configFile=/tmp/config_table1.properties
hoodie.deltastreamer.ingestion.db2.table2.configFile=/tmp/config_table2.properties

方式二:

將所有表的配置文件統一放置到一個文件夾,并按照 <database>_<table>_config.properties 形式統一命名,通過 --config-folder 參數指明文件夾的路徑后,Hudi 就能根據文件名自動映射到對應表,不必再向方式一那樣顯式配置。這是使用了“約定大約配置”的處理方式,方式二更加簡潔,是首選的配置方式,我們接下來就詳細介紹一下。

2. 首選方式:使用約定的多表文件命名規則簡化配置


這一配置方式可簡述為:將所有表的配置文件統一放置到一個文件夾下,并按照 <database>_<table>_config.properties 形式統一命名,同時,在公共配置文件中通過 hoodie.deltastreamer.ingestion.tablesToBeIngested 配置項以 <db1>.<table1>,<db2>.<table2>,... 的形式列出所有表,最后,在命令行中通過參數 --config-folder 指明文件夾的路徑,這樣 Hudi 就能根據約定的命名規則找到每張表的對應配置文件,那就不必再通過 hoodie.streamer.ingestion.<database>.<table>.configFile 顯式地逐一配置。以下是一個示例:

1. common.properties

hoodie.deltastreamer.ingestion.tablesToBeIngested=db1.table1,db2.table2

2. config folder 目錄結構

/tmp
├── db1_table1_config.properties
├── db2_table2_config.properties

3. 作業提交命令

spark-submit \...--props file://common.properties \--config-folder file://tmp \...

3. 啟用 Schema Registry 時多個 Topic 的 Schema URL 的配置方法


另一個涉及多表特化配置的地方是在 HoodieMultiTableStreamer 攝取 Debezium CDC 數據寫入 Hudi 表時,由于 Hudi 的 Streamer 在處理 Debezium CDC 時強依賴 Confluent Schema Registry,在攝取每一張表對應的 Topic 時都需要指定 Topic 的 Schema Url,為了避免大量的手動配置,HoodieMultiTableStreamer 再次使用了“約定大約配置”的處理方式,它通過hoodie.streamer.schemaprovider.registry.baseUrl 指定 url 的 base 部分,通過 hoodie.streamer.schemaprovider.registry.urlSuffix 指定 url 的后綴部分,中間部分是 Topic 的名稱,由 Hudi 自動拼接,這樣動態地獲得了每張表對應 Topic 的 Schema Url。

4. 重點參數


我們上面提到的幾個重點參數再集中梳理一下:

4.1 命令行中的重要參數


  • --base-path-prefix 指定攝取數據后 Hudi 數據集存放的 base 目錄,數據集將按照:<base-path-prefix>/<database>/<table> 格式存放
  • --config-folderHoodieMultiTableStreamer 下專門用于指定存放所有表配置文件的路徑,配置約定的文件命名 pattern:<database>_<table>_config.properties,Hudi 就能自動找到每張表的配置文件,那不必再通過 hoodie.streamer.ingestion.<database>.<table>.configFile 單獨配置

4.2 配置文件中的重要參數


  • hoodie.streamer.ingestion.tablesToBeIngested:需要被實時攝取并同步的表,單表使用 <database>.<table> 形式,多表用逗號分隔,例如:db1.table1,db1.table2

  • hoodie.streamer.ingestion.<database>.<table>.configFile:每張表需要提供的 Hudi 配置文件的存放路徑。由于數據表可能非常多,逐一配置所有的表非常繁瑣,因此 Hudi Streamer 提供一種文件命名模式:<database>_<table>_config.properties,只要我們將對應表的配置文件以此模式命名并放置于 --config-folder 配置的文件夾下,Hudi 就能自動映射為對應表的配置,不必再顯式地配置這一項!

  • hoodie.streamer.schemaprovider.registry.url 是給單表(HoodieStreamer)用的

  • hoodie.streamer.schemaprovider.registry.baseUrl + hoodie.streamer.schemaprovider.registry.urlSuffix 聯合起來給多表 用的!!

5. 完整示例


最后,我們引用《CDC 數據入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》一文第 6 節給出一個完整示例作為一個參考:

tee global-config.properties << EOF
# deltastreamer props
hoodie.deltastreamer.schemaprovider.registry.schemaconverter=org.apache.hudi.utilities.schema.converter.JsonToAvroSchemaConverter
hoodie.deltastreamer.ingestion.tablesToBeIngested=inventory.orders
hoodie.deltastreamer.schemaprovider.class=org.apache.hudi.utilities.schema.SchemaRegistryProvider
hoodie.deltastreamer.schemaprovider.registry.baseUrl=${SCHEMA_REGISTRY_URL}/subjects/
hoodie.deltastreamer.schemaprovider.registry.urlSuffix=-value/versions/latest
hoodie.deltastreamer.source.kafka.value.deserializer.class=io.confluent.kafka.serializers.KafkaAvroDeserializer
# kafka props
bootstrap.servers=$KAFKA_BOOTSTRAP_SERVERS
auto.offset.reset=earliest
# schema registry props
schema.registry.url=http://10.0.13.30:8085
EOFtee inventory_orders_config.properties << EOF
include=global-config.properties
hoodie.deltastreamer.source.kafka.topic=osci.mysql-server-3.inventory.orders
hoodie.datasource.write.recordkey.field=order_number
hoodie.datasource.write.partitionpath.field=order_date
hoodie.datasource.hive_sync.partition_extractor_class=org.apache.hudi.hive.MultiPartKeysValueExtractor
hoodie.datasource.write.hive_style_partitioning=true
hoodie.datasource.hive_sync.database=inventory
hoodie.datasource.hive_sync.table=orders
hoodie.datasource.hive_sync.partition_fields=order_date
EOFaws s3 rm --recursive $APP_S3_HOME/inventory_ordersspark-submit \--master yarn \--deploy-mode client \--jars /usr/lib/spark/connector/lib/spark-avro.jar \--class org.apache.hudi.utilities.deltastreamer.HoodieMultiTableDeltaStreamer \/usr/lib/hudi/hudi-utilities-bundle.jar \--props file://$HOME/global-config.properties \--table-type COPY_ON_WRITE \--op UPSERT \--config-folder file://$HOME \--base-path-prefix $APP_S3_HOME \--target-table inventory.orders \--continuous \--min-sync-interval-seconds 60 \--source-class org.apache.hudi.utilities.sources.debezium.MysqlDebeziumSource \--payload-class org.apache.hudi.common.model.debezium.MySqlDebeziumAvroPayload \--schemaprovider-class org.apache.hudi.utilities.schema.SchemaRegistryProvider

關聯閱讀

  • 《CDC 數據入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》

  • 《CDC 數據入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16059.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3添加收藏網站頁面

結構與樣式 <template><div class"web_view"><ul><li v-for"web in webList" :key"web.title"><a :href"web.src" :title"web.title" target"_blank"><img :src"web.img&…

微信小程序基礎 -- 小程序UI組件(5)

小程序UI組件 1.小程序UI組件概述 開發文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/view/component.html 什么是組件&#xff1a; 組件是視圖層的基本組成單元。 組件自帶一些功能與微信風格一致的樣式。 一個組件通常包括 開始標簽 和 結…

Cyber Weekly #8

賽博新聞 1、微軟召開年度發布會Microsoft Build 2024 本周&#xff08;5.22&#xff09;微軟召開了年度發布會&#xff0c;Microsoft Build 2024&#xff0c;發布了包括大殺器 Copilot Studio 在內的 50 項更新。主要包括&#xff1a; 硬件層面&#xff1a;與英偉達 & A…

3D牙科網格分割使用基于語義的特征學習與圖變換器

文章目錄 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer摘要方法實驗結果 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer 摘要 本文提出了一種新穎的基于語義的牙科網格分割方…

民國漫畫雜志《時代漫畫》第16期.PDF

時代漫畫16.PDF: https://url03.ctfile.com/f/1779803-1248612470-6a05f0?p9586 (訪問密碼: 9586) 《時代漫畫》的雜志在1934年誕生了&#xff0c;截止1937年6月戰爭來臨被迫停刊共發行了39期。 ps:資源來源網絡&#xff01;

代碼隨想錄訓練營總結

歷經60天的訓練營終于結束啦&#xff0c;感覺自己兩個月前做的這個決定非常正確&#xff0c;非常感謝卡哥和卡哥助手&#xff0c;從一個代碼沒有系統刷題沒有體系的小白到現在已經有了一些基礎&#xff0c;也具備一些刷題的習慣和手感&#xff0c;如果是我自己沒有規劃的刷可能…

【C++】二分查找:在排序數組中查找元素的第一個和最后一個位置

1.題目 難點&#xff1a;要求時間復雜度度為O(logn)。 2.算法思路 需要找到左邊界和右邊界就可以解決問題。 題目中的數組具有“二段性”&#xff0c;所以可以通過二分查找的思想進行解題。 代碼&#xff1a; class Solution { public:vector<int> searchRange(vect…

Camunda BPM主要組件

Camunda BPM是使用java開發的,核心流程引擎運行在JVM里,純java庫,不依賴其他庫或者底層操作系統。可以完美地與其他java框架融合,比如Spring。除了核心流程引擎外,還提供了一系列的管理,操作和監控工具。 1,工作流引擎 既適用于服務或者微服務編排,也適用于人工任務管…

Leetcode42題:接雨水

1.題目描述 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 輸入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 輸出&#xff1a;6 解釋&#xff1a;上面是由數組 [0,1,0,2,1,0,1,…

hadoop節點添加與刪除測試

hadoop節點上下線 docker run -d --name hd1 -p 8888:8888 -p 2222:22 centos:basic init docker run -d --name hd2 -p 8889:8889 centos:basic init docker run -d --name hd3 centos:basic init# hosts echo "172.17.0.2 hadoop1 172.17.0.3 hadoop2 172.17.0.4 hadoo…

網絡協議:CSMA/CD 和 CSMA/CA

當多臺設備共享同一通信信道時&#xff0c;避免數據傳輸沖突至關重要。本文將探討兩種廣泛使用的協議&#xff1a;CSMA/CD&#xff08;Carrier Sense Multiple Access with Collision Detection&#xff09;和CSMA/CA&#xff08;Carrier Sense Multiple Access with Collision…

【C語言】二叉樹的實現

文章目錄 前言?一、二叉樹的定義&#x1f6b2;二、創建二叉樹&#x1f3a1;三、二叉樹的銷毀&#x1f389;四、遍歷二叉樹1. 前序遍歷2. 中序遍歷3. 后序遍歷4. 層序遍歷 &#x1f332;五、二叉樹的計算1. 計算二叉樹結點個數2. 計算二叉樹葉子結點的個數3. 計算二叉樹的深度4…

一、Elasticsearch介紹與部署

目錄 一、什么是Elasticsearch 二、安裝Elasticsearch 三、配置es 四、啟動es 1、下載安裝elasticsearch的插件head 2、在瀏覽器&#xff0c;加載擴展程序 3、運行擴展程序 4、輸入es地址就可以了 五、Elasticsearch 創建、查看、刪除索引、創建、查看、修改、刪除文檔…

【MySQL】——并發控制

&#x1f4bb;博主現有專欄&#xff1a; C51單片機&#xff08;STC89C516&#xff09;&#xff0c;c語言&#xff0c;c&#xff0c;離散數學&#xff0c;算法設計與分析&#xff0c;數據結構&#xff0c;Python&#xff0c;Java基礎&#xff0c;MySQL&#xff0c;linux&#xf…

計算機畢業設計 | springboot+vue房屋租賃管理系統(附源碼)

1&#xff0c;緒論 1.1 課題來源 隨著社會的不斷發展以及大家生活水平的提高&#xff0c;越來越多的年輕人選擇在大城市發展。在大城市發展就意味著要在外面有一處安身的地方。在租房的過程中&#xff0c;大家也面臨著各種各樣的問題&#xff0c;比如需要費時費力去現場看房&…

oj項目后端分析

1.菜單管理 我們菜單管理有菜單表(sys_menu)&#xff0c;還有用戶角色表&#xff08;sys_role&#xff09;&#xff0c;菜單表是用于管理我們用戶所擁有的權限&#xff0c;不同的用戶所看到的頁面是不一樣的&#xff0c;由于一些用戶他能夠看到題庫管理和考題管理&#xff0c;還…

Anaconda Anaconda支持什么編程語言的環境配置

Anaconda是一個數據科學和機器學習的開發環境&#xff0c;它支持多種編程語言的環境配置&#xff0c;包括&#xff1a; Python&#xff1a;Anaconda默認安裝了Python和必需的Python庫&#xff0c;可以方便地進行Python編程和數據分析。 R&#xff1a;Anaconda也可以配置R語言環…

Aws EC2 + Aws Cli + Terraform

1 什么是 Terraform&#xff1f; Terraform 是由 HashiCorp 創建的“基礎架構即代碼”(Infrastructure-as-Code&#xff0c;IaC)開源工具。Terraform 的配置語言是 HashiCorp Configuration Language&#xff08;HCL&#xff09;&#xff0c;用來替代更加冗長的 JSON 和 XML 等…

SpringBoot注解--09--idea創建spring boot項目,java版本只能選擇17和21

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 idea創建spring boot項目1.問題描述2.原因3.解決方法方案一&#xff1a;升級JDK版本至17或更高方案二&#xff1a;替換Spring初始化的源https://start.aliyun.com i…

實時計算及異構計算隨筆筆記

3、異構計算的典型應用 異構計算并不神秘&#xff0c;目前已滲透各個領域&#xff0c;不僅是PC領域&#xff0c;也包括了手持移動設備領域、行業領域&#xff0c;甚至是云計算、分布式計算領域。事實上&#xff0c;異構計算至少在應用端&#xff08;前臺&#xff09;并不像它的…