生態 | Apache Hudi整合Alluxio實踐
原文連結:https://mp.weixin.qq.com/s/sT2-KK23tvPY2oziEH11Kw
1. 什麼是Alluxio
Alluxio為資料驅動型應用和儲存系統構建了橋樑, 將資料從儲存層移動到距離資料驅動型應用更近的位置從而能夠更容易被訪問。這還使得應用程式能夠通過一個公共介面連線到許多儲存系統。Alluxio記憶體至上的層次化架構使得資料的訪問速度能比現有方案快幾個數量級。
對於使用者應用程式和計算框架,Alluxio提供了快速儲存,促進了作業之間的資料共享和區域性性。當資料位於本地時,Alluxio可以以記憶體速度提供資料;當資料位於Alluxio時,Alluxio可以以計算叢集網路的速度提供資料。第一次訪問資料時,只從儲存系統上讀取一次資料。為了得到更好的效能,Alluxio推薦部署在計算叢集上。
對於儲存系統,Alluxio彌補了大資料應用與傳統儲存系統之間的差距,擴大了可用的資料工作負載集。當同時掛載多個資料來源時,Alluxio可以作為任意數量的不同資料來源的統一層。
Alluxio可以被分為三個部分:masters、workers以及clients。一個典型的設定由一個主伺服器、多個備用伺服器和多個worker組成。客戶端用於通過Spark或MapReduce作業、Alluxio命令列等與Alluxio伺服器通訊。
2. 什麼是Apache Hudi
Apache Hudi使得您能在hadoop相容的儲存之上儲存大量資料,同時它還提供兩種原語,使得除了經典的批處理之外,還可以在資料湖上進行流處理。這兩種原語分別是:
- Update/Delete記錄:Hudi使用細粒度的檔案/記錄級別索引來支援Update/Delete記錄,同時還提供寫操作的事務保證。查詢會處理最後一個提交的快照,並基於此輸出結果。
- 變更流:Hudi對獲取資料變更提供了一流的支援:可以從給定的時間點獲取給定表中已updated/inserted/deleted的所有記錄的增量流,並解鎖新的查詢姿勢(類別)
3. 步驟
3.1 環境準備
參考官網安裝搭建alluxio環境:https://www.alluxio.io/
3.2 執行
在hudi可以載入到的cores-site.xml 檔案裡面追加此配置
<property>
<name>fs.alluxio.impl</name>
<value>alluxio.hadoop.FileSystem</value>
</property>
將此依賴新增進工程pom.xml
<dependency>
<groupId>org.alluxio</groupId>
<artifactId>alluxio-shaded-client</artifactId>
<version>2.2.1</version>
</dependency>
使用者可以把jar包放在spark可以載入的地方或者通過以下方式引入
--jars alluxio-shaded-client-2.2.1.jar
這時只需要把資料寫入alluxio即可,使用deltastreamer的使用需要如下配置
--target-base-path alluxio://........
完成上述步驟就已經完成了把hudi資料寫入了alluxio的工作。事實上這個時候資料還未從hdfs載入到alluxio,需要查詢一次即可;查詢不同的hudi檢視方式
- 可以使用hive sql查詢。使用命令查詢hive表結構發現loaction已經指向了alluxio
- 可以使用spark sql查詢。
spark.read.format("org.apache.hudi").option(xxx).load("alluxio://")
3.3 驗證
驗證在未進行查詢的時候資料不會載入進alluxio,in-alluxio是0%,當進行一次查詢之後資料從hdfs載入進alluxio,in-alluxio大於0%。
4. 問題
4.1 能否做到Alluxio與Hudi完全可拔插?
目前Hudi與開源版本alluxio無法完全做到可拔插。因為hudi依賴hive表進行某些檢視的查詢,然而要把hive表的資料來源從alluxio指向hdfs需要修改hive表的loaction,但是生產環境我們一般無法進行線上修改hive表的操作。如果想不修改location可以使用alluxio企業版本