- Q1. What are you trying to do? Articulate your objectives using absolutely no jargon.
- Q2. What problem is this proposal NOT designed to solve?
- Q3. How is it done today, and what are the limits of current practice?
- Q4. What is new in your approach and why do you think it will be successful?
- Q5. Who cares? If you are successful, what difference will it make?
- Q6. What are the risks?
- Q7. How long will it take?
- Q8. How does it work?
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