ApacheHudi使用問題彙總(一)

1.如何寫入Hudi數據集

       通常,你會從源獲取部分更新/插入,然後對Hudi數據集執行寫入操作。如果從其他標準來源(如Kafka或tailf DFS)中提取數據,那麼DeltaStreamer將會非常有用,其提供了一種簡單的自我管理解決方案,可將數據寫入Hudi。你還可以自己編寫代碼,使用Spark數據源API從自定義源獲取數據,並使用Hudi數據源寫入Hudi。

2. 如何部署Hudi作業

      寫入Hudi的好處是它可以像在YARN/Mesos甚至是K8S羣集上運行的任何其他Spark作業一樣運行。只需使用Spark UI即可查看寫入操作,而無需單獨搭建Hudi集羣。

3. 如何查詢剛寫入的Hudi數據集

      除非啓用了Hive同步,否則與其他任何源一樣,通過上述方法寫入Hudi的數據集可以簡單地通過Spark數據源進行查詢。

val hoodieROView = spark.read.format("org.apache.hudi").load(basePath + "/path/to/partitions/*")

val hoodieIncViewDF = spark.read().format("org.apache.hudi")

.option(DataSourceReadOptions.VIEW_TYPE_OPT_KEY(), DataSourceReadOptions.VIEW_TYPE_INCREMENTAL_OPT_VAL())

.option(DataSourceReadOptions.BEGIN_INSTANTTIME_OPT_KEY(), <beginInstantTime>)

.load(basePath);

 

請注意:當前不支持從Spark數據源讀取實時視圖。請使用下面的Hive路徑。

     如果在deltastreamer工具或數據源中啓用了Hive Sync,則該數據集會同步到Hive的幾張表中,可以使用HiveQL,Presto或 SparkSQL進行讀取。點擊這裏查看更多。

4. Hudi如何處理輸入中的重複記錄

       在數據集上執行 upsert操作時,提供的記錄包含給定鍵的多條記錄,然後通過重複調用有效負載類的 preCombine方法將所有記錄合併爲一個最終值。默認情況下會選擇最大值的記錄(由 compareTo決定)。

對於 insertbulk_insert操作,不執行 preCombine。因此,如果你的輸入包含重複項,則數據集也將包含重複項。如果您不希望重複的記錄,請使用upsert或在數據源或deltastreamer中指定刪除重複數據的配置項。

5. 可以實現自定義合併邏輯處理輸入記錄和存儲的記錄嗎?

      與上面類似,定義有效負載類定義的方法(combineAndGetUpdateValue(),getInsertValue()),這些方法控制如何將存儲的記錄與輸入的更新/插入組合以生成最終值以寫回到存儲中。

6. 如何刪除數據集中的記錄?

     GDPR使刪除成爲數據管理工具箱中的必備工具。Hudi支持軟刪除和硬刪除。有關如何實際執行它們,請參見此處。

7. 如何將數據遷移到Hudi

     Hudi對遷移提供了內置支持,可使用 hudi-cli提供的 HDFSParquetImporter工具將整個數據集一次性寫入Hudi。也可以使用Spark數據源API讀取和寫入數據集。遷移後,可以使用此處討論的常規方法執行寫操作。這裏也詳細討論該問題,包括部分遷移的方法。

8. 如何將Hudi配置傳遞給Spark作業

      這裏涵蓋了數據源和Hudi寫入客戶端(deltastreamer和數據源都會內部調用)的配置項。在DeltaStreamer之類的工具上調用 --help都會打印所有使用選項。許多控制 upsert、調整文件大小的選項是在客戶端級別定義的,下面是將它們傳遞給可用於寫數據配置項的方式。

1). 對於Spark DataSource,可以使用DataFrameWriter的 options API來傳遞這些配置項。

inputDF.write().format("org.apache.hudi")

.options(clientOpts) // any of the Hudi client opts can be passed in as well

.option(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key")

...

2). 直接使用HoodieWriteClient時,只需使用配置來構造HoodieWriteConfig對象。

3). 使用HoodieDeltaStreamer工具提取時,可以在屬性文件中設置配置項,並將該文件作爲命令行參數 --props傳遞。

9. 可以在Apache Hive Metastore中註冊Hudi數據集嗎

可以, 可以通過獨立的Hive Sync工具或使用deltastreamer工具或數據源中的選項來執行此操作。

10. Hudi索引的工作原理及其好處是什麼?

索引是Hudi寫入的關鍵部分,它始終將給定的 recordKey映射到Hudi內部的文件組( FileGroup)。這樣可以更快地識別受給定寫入操作影響的文件組。

Hudi支持以下幾種索引配置

  • HoodieBloomIndex(默認):使用bloom過濾器和範圍信息,並在parquet/基礎文件(不久後的日誌文件也支持)的頁腳中放置該信息。

  • HoodieGlobalBloomIndex:默認索引僅在單個分區內強制執行鍵的唯一性,即要求用戶知道存儲給定記錄鍵的分區。這可以幫助非常大的數據集很好地建立索引。但是,在某些情況下,可能需要在所有分區上執行重複數據刪除/強制唯一性操作,這就需要全局索引。如果使用此選項,則將傳入記錄與整個數據集中的文件進行比較,並確保僅在一個分區中存在 recordKey

  • HBaseIndex:Apache HBase是一個鍵值存儲,可以將索引存儲在HBase內,如果已經在使用HBase,這將會非常方便。

也可以自定義索引,需要實現HoodieIndex類並在配置中配置索引類名稱。

發佈了65 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章