原文鏈接: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企業版本