利用Alluxio構建計算-存儲解耦架構
這篇博客探討了在數據平台上使用Alluxio的幾點優勢,主要從如下方面介紹:
1 計算-存儲解耦架構興起的趨勢
2 Alluxio如何加速計算-存儲解耦架構中數據訪問
3 通過運行SparkSQL workload展現Alluxio的優勢
動機
計算-存儲緊耦架構是一種在數據存儲的節點上進行計算的架構,這種架構解決了計算引擎的數據需求,但維持這種緊耦結合的架構需要一定代價,這往往超出了其帶來的性能提升。隨著雲計算的興起,獨立擴展計算和存儲的成本和維護代價更低。另外,數據已經成為一種新型的珍貴資源,所有現代組織都在試圖獲取儘可能多的數據,而數據存儲階段往往早於發掘數據價值階段,所以存儲計算的緊耦合是不切實際的。計算-存儲範式的顛倒使很多數據平台陷入困境,強迫他們在性能,成本和靈活性之間進行權衡。Alluixo解決了這一兩難困境,它提供了一種計算存儲解耦架構,其性能與計算-存儲緊耦合架構相同,並且更加靈活。
Alluxio是如何發揮作用的
當Alluxio在計算節點上或靠近計算節點的位置運行時,Alluxio通過提供靠近計算端的緩存來實現性能提升。應用和計算框架通過Alluxio發送請求,Alluxio反過來會從遠程存儲系統獲取數據。同時,Alluxio拷貝一份數據緩存在Alluxio存儲空間中,這樣數據可以在Alluxio節點的內存或持久化存儲介質中可用。之後應用將直接讀取緩存中的數據。這必然可以提升計算存儲解耦架構的性能。然而,Alluxio只處理工作集數據,不保存持久化數據。因此,Alluxio不需要超大容量存儲,可以在一定大小的存儲空間發揮作用,而不必考慮數據總量。Alluxio還利用多級緩存和數據管理技術以高效地管理存儲空間。
Alluxio位於計算層和存儲層之間,提供數據訪問和整合的統一入口。這意味著應用可以自由使用任意Alluxio支持的統一介面,例如S3介面或者Hadoop兼容的介面。另外,數據可以自動在存儲系統和應用端進行交互,而不管底層存儲系統原本支持的介面。這種概念擴展的不僅僅是API的翻譯,底層存儲系統的安全性和一致性等功能也進行了抽象並通過Alluxio提供。
在S3和Alluxio之上運行SparkSQL
為了示例說明Alluxio為計算-存儲解耦架構帶來的性能提升,我們在SparkSQL上運行TPC-DS 2.4,數據存放在S3中。TPC-DS 是一個實際的工業測試基準,專門為大數據分析查詢所定製。99個查詢集合順序執行,這意味著開始的查詢讀取S3中的冷數據,之後將從Alluxio存儲系統中查詢緩存數據。實驗在AWS上進行,應用開源版本的Alluxio 1.7.0和Apache Spark 2.2。集群擁有4 個r4.4xlarge worker節點,每個節點上同時運行Alluxio worker和Spark worker,灰色的S3數據代表了TPC-DS查詢存儲在S3中的Parquet數據的實驗性能結果,Alluxio完全不參與數據讀寫。藍色的Alluxio數據代表了使用Alluxio後的實驗性能結果,但Alluxio在實驗開始時沒有存儲數據。隨著查詢進行,Alluxio將對數據進行緩存,同時基於數據熱度自動管理其存儲空間。比如,對於經常訪問的文件,Alluxio為了提升讀數據的吞吐量,將拷貝多份數據,下表展示了測試中不同類型的查詢性能結果,以及應用Alluxio對查詢性能產生的影響。
第一個查詢集合是初始查詢,即直接從S3中讀取冷數據。因為Alluxio必須從S3中預先讀取數據,所以兩種查詢方式的效果幾乎相同。從Alluxio1.7.0版本開始,Alluxio worker會通過客戶端數據訪問方式智能地非同步讀取塊數據,所以初始讀取數據階段不會造成較大影響,甚至會提升查詢效率。
在最好情況下,即大多數數據集都存儲在Alluxio中,並且查詢是I/O密集型,Alluxio可以加速查詢速度10倍左右。針對絕大多數查詢類型,使用Alluxio後性能都有所提升,例如寬掃描查詢。不使用Alluxio查詢的I/O速度是網路通信級別的,而使用Alluxio後,在S3上進行的I/O查詢速率可以接近本地內存級別。在評估查詢性能時,查詢越受到I/O瓶頸限制,則引入Alluxio後提升的吞吐量越多。因為使用了S3和AWS存儲,網路狀態是理想的,實驗可以充分利用10千兆飽和網路連接。在網路帶寬或磁碟I/O帶寬更低,數據傳輸受限更多的情況,Alluxio會帶來更大的性能提升。
相反,對於極度的計算密集型或shuffer密集型查詢,例如帶有複雜謂詞的join查詢請求,Alluxio性能提升較少。對於計算和I/O都成為部分瓶頸的查詢,Alluxio加速I/O受限的部分,提升的性能在總體實驗結果中居中。在實驗中,沒有查詢在使用Alluxio後性能下降。
比較運行總耗時,儘管Alluxio初始沒有載入數據,Alluxio還是比直接從S3讀取數據快40%。隨著查詢任務的進行,Alluxio根據數據訪問模式和頻率逐漸緩存數據。然而,總運行耗時並不能全面描述實際情況,因為長耗時查詢會佔很大比重。通過賦予每個查詢相同的比重,Alluxio可以提高查詢的幾何平均數接近兩倍!這些結果反映了Alluxio可以提高所有TPC-DS基準測評中的查詢性能,對於某些查詢性能甚至能夠提高一個數量級。而且,將Alluxio引入整個技術棧不會對任何查詢性能產生負面影響。
結論
TPC-DS代表了一類採用Alluxio實現計算-存儲解耦架構而提升性能的工作負載。通過使用Alluxio,需要不同API的應用可以無縫地從解耦開的、並且之前不兼容的存儲系統中訪問傳輸數據,而且這種數據訪問無需處理性能損失方面的問題。
推薦閱讀:
※大數據分析學習路線
※MaxCompute Optimizer之表達式約化
※O2O,大數據與智能化才是未來所在
※大數據平台與傳統數據倉庫對比分析
※MaxCompute 中的Code Generation技術簡介