KIP-5:Apache Kylin深度整合Hudi

leesf發表於2021-06-15

Q1. What are you trying to do? Articulate your objectives using absolutely no jargon.

  • 對於Hudi資料湖源端整合
    • 將企業資料湖中以Hudi格式儲存的資料集作為Kylin的源端輸入
  • 對於Kylin cube重新構建&合併優化
    • 支援Kylin的Cuboid使用Hudi格式儲存
    • 使用Hudi的增量查詢檢視加速和優化Kylin cube重新構建過程,僅解析上次cube構建後變更的資料
    • 使用Hudi的Compaction功能加速和優化Kylin Cube合併過程(針對增量cuboid檔案),或者使用Hudi的Upsert功能來合併多個cuboid檔案,類似Upsert到MOR表,並支援Select查詢

Q2. What problem is this proposal NOT designed to solve?

  • 不支援Hudi的其他型別的資料來源(例如Kafka)不在此範圍內
  • 流式CubeEnginer不在此範圍內

Q3. How is it done today, and what are the limits of current practice?

  • 當前無論輸入格式是否為Hudi,Kylin都使用Beeline JDBC機制直接連線到Hive源
  • 當前的實現無法利用Hudi的原生和高階功能(例如增量查詢、讀優化檢視查詢等),Kylin可以從較小的增量cuboid合併和更快的源資料提取中受益

Q4. What is new in your approach and why do you think it will be successful?

對於Hudi Source整合

  • 新的方法
    • 使用Hudi的原生優化檢視查詢和MOR表來加速Kylin的cube構建過程
  • 為什麼會成功
    • Hudi已在大資料領取和技術棧中釋出併成熟,許多公司已經在Data Lake/Raw/Curated資料層中使用了Hudi
    • Hudi lib已經與Spark DF/Spark SQL整合,可以使用Kylin的Spark Engine查詢Hudi資料來源
    • Hudi的Parquet基礎檔案和Avro日誌以及索引後設資料等都可以通過Hive的外部表和輸入格式定義進行連線,Kylin可以利用它們進行提取

Hudi作為Cuboid儲存

  • 新的方法
    • 使用Hudi的原生增量檢視查詢優化Kylin的cube重建過程,以僅捕獲變更的資料並僅重新計算和更新必要的cuboid檔案
    • 使用Hudi的upsert功能來操作cuboid檔案,以優化Kylin的cube合併過程;而不是以前的join和shuffle方式
  • 為什麼會成功
    • Hudi根據記錄的PK支援upsert,每個cuboid的維度key-id都可以視為PK
    • 這樣當進行重建和合並操作時,它可以直接更新以前的cuboid檔案,或基於PK合併多個cuboid檔案並將它們壓縮為Parquet檔案

Q5. Who cares? If you are successful, what difference will it make?

  • 如果在Kylin中啟用了新的整合功能,從事資料探勘/探索/報告等工作的資料科學家將有更快的cube集構建時間
  • 正在開發DW/DM層資料建模的資料工程師將最大程度地減少cube上的單元測試/效能測試的實現和交付工作

Q6. What are the risks?

沒有其他風險,因為它只是配置Hudi源型別的替代選擇,其他Kylin的元件和管道也不會受到影響

Q7. How long will it take?

N/A

Q8. How does it work?

總體架構設計的邏輯圖如下:

  • 對於Hudi源整合

    • 在kylin.property中為Hudi源型別新增新的配置項(例如:isHudiSouce = true,HudiType = MOR)
    • 使用Hudi原生客戶端API新增新的ISouce介面和實現
    • 在配置單元外部表中使用Hudi客戶端API查詢優化檢視及提取源Hudi資料集
  • 對於Hudi cuboid儲存

    • 在kylin.property中為cuboid的Hudi儲存型別新增新的配置項(例如isHudiCuboidStorage = true)
    • 使用Hudi編寫API新增新的ITarget介面和實現,以實現內部儲存和cuboid檔案的操作
  • 對於使用新的Hudi源型別cube重建

    • 使用Hudi的增量查詢API僅從Cube段的時間戳的最後時間提取變更的資料
    • 使用Hudi的upsert API合併cuboid的變更資料和以前的歷史資料
  • 對於新的Hudi Cuboid儲存型別cube合併

    • 使用Hudi upsert API合併2個cuboid檔案

Reference

Hudi framework: https://hudi.apache.org/docs/

hive/spark integration support for Hudi: https://hudi.apache.org/docs/querying_data.html

原文:https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=KYLIN&title=KIP-5+Integration+with+Hudi

相關文章