search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

使用Alluxio提升HDFS集群的性能和SLA穩定性

本文由南京大學顧榮、李崇傑翻譯整理自Alluxio公司技術博客,由Alluxio公司授權CSDN首發(聯合),版權歸Alluxio公司所有,未經版權所有者同意請勿轉載。

1.介紹

Alluxio是世界上第一個以內存為中心的虛擬的分散式存儲系統。它為上層計算框架和底層存儲系統構建了橋樑,統一了數據訪問的方式,使得數據的訪問速度能比現有常規方案高出幾個數量級。Hadoop Distributed File System(HDFS)是一個用來存儲大規模數據的分散式存儲系統。HDFS推廣了計算向數據遷移的模式,以及計算和存儲共同部署的存儲架構。

在這篇文章中,我們重點介紹Alluxio可以給與HDFS共同部署的計算集群的兩大好處。

  • 性能的高可預測性使得SLA(service-level agreement服務級別協議)很容易滿足。例:作業運行時間的變化範圍從100秒以上縮短至2秒;
  • 高達10倍的性能提升。

我們使用Spark2.0來完成計算作業,並對比2種軟體棧下作業的執行性能。第一種軟體棧是將Spark作業直接運行在HDFS的數據上,另一種是將Spark作業運行在使用HDFS作為底層存儲系統的Alluxio的數據上。

2.為什麼使用Alluxio

在一個共享的計算集群中,用戶在一段時間內經常會在類似的數據集上運行計算任務。例如,許多數據科學家可能會想嘗試從前一周收集的數據中挖掘出一些價值。同時,少部分用戶會訪問不經常使用的數據集,比如利用前一個月收集的數據生成報告。因此,為了優化計算任務的性能,可以將數據存儲在內存中。然而,集群的內存總量是有限的,並不能存儲所有的數據,這說明需要一個分散式內存管理系統。目前有一些已經實現的系統可供選擇。

Alluxio

使用Alluxio,你可以基於數據的特點來顯式地管理數據,例如數據的訪問頻率。這使得系統可以將熱點數據顯式地保存在內存中,以加速訪問這些熱點數據的作業。此外,Alluxio提供了穩定的性能,可以保證整個系統提供的服務質量的穩定性。

操作系統緩存/頁緩存

操作系統會自動嘗試利用機器的內存來加速磁碟I/O。當重複地在同一數據集上運行任務(該數據集能夠完全放入內存中),操作系統緩存會比較高效,能提供和Alluxio相當的性能優化效果。然而,當遇到更大的數據集或者訪問不同數據集的任務一起運行時,性能將會有很大的變化,平均情況下要比類似於Alluxio的數據感知系統低效很多。

Spark持久化

Spark本身提供臨時持久化數據的選項,不需要使用其他外部系統。然而,這些機制被限制在單個SparkContext中,阻礙了多個用戶受益於單個用戶持久化在內存中的數據。結果是每個SparkContext都消耗系統資源(內存、磁碟)存儲各自的數據,這在共享的環境中十分低效,尤其是當大量的內存被不必要的消耗的情況下。

3.Alluxio在共享環境中的優勢

為了模擬使用各種不同冷熱數據的多租戶環境,我們設置了以下實驗:

  • 在任何時間點,集群上會運行兩個作業:月作業和周作業;
  • 每一個作業使用一半的CPU和內存資源;
  • 新的作業會在前一個同類型作業完成時立即開始;
  • 在周作業的數據上先運行一個簡單的計算作業,以給操作系統的緩存以及Alluxio內存存儲預熱。

因為每個作業都是獨立的,使用Spark的持久化策略進行數據共享是不適用的。所以,我們主要比較Alluxio內存存儲和操作系統緩存機制的效果。

作業名描述
月IO運行在前一個月數據上的I/O密集型作業
月CPU運行在前一個月數據上的CPU密集型作業
周IO運行在前一周數據上的IO密集型作業
周CPU運行在前一周數據上的CPU密集型作業

該實驗在兩個不同的軟體棧上進行,其中一個使用Alluxio (即Spark + Alluxio + HDFS),另外一個不使用Alluxio (即Spark + HDFS)。所有的實驗都運行在公有雲虛擬機實例上。總的數據集大小是集群可用內存的三倍。

場景1

在第一個場景中,周作業和月作業都是IO密集型作業。Alluxio對這兩種作業的性能提升都很明顯。對於周作業,熱數據可以確保完全存儲在Alluxio內存中,我們可以以內存級速度讀取數據,從而持續地加速上層作業。事實上,我們可以發現此時的性能瓶頸為I/O的作業變成了CPU為性能瓶頸。另外,在不使用Alluxio的情況下,作業執行性能的波動範圍較大(見圖中用紅線標出的最小和最大範圍),甚至可能比使用Alluxio的情況慢10倍以上。這是由於操作系統頁緩存緩存數據的不可預測性導致的。由於數據量大於內存總容量的緣故,使用Alluxio給月作業帶來的性能提升不如周作業明顯。儘管我們可以通過Spark靜態地劃分CPU和內存資源(針對Spark task而言,不要與Alluxio內存混淆),但是我們不能細粒度的控制I/O資源,比如磁碟的訪問。在不使用Alluxio的情況下,兩種作業的性能都被I/O所限制,當數據不在操作系統緩存中時兩種作業都會受限於I/O。使用Alluxio的情況下,月作業可以完全利用磁碟帶寬,因為周作業從內存直接讀取數據而不需要使用磁碟帶寬。

場景2

第二個場景中,月作業仍然是I/O密集型的,但是周作業變為CPU密集型的。這種場景下,Alluxio還是同時提高了兩種任務的性能。周作業得益於Alluxio帶來的內存級速度的I/O,但是性能提升沒有之前的IO密集型作業明顯。因為,此時的性能主要受機器的CPU吞吐量影響。然而,月作業在使用Alluxio的情況下表現出極大的優勢,因為場景1中月作業的性能影響因素在此場景下仍然適用。此外,周作業對操作系統緩存的低效使用導致了更多磁碟資源的競爭,大大降低了月作業的執行性能。

場景3

在第三個場景中,月作業是CPU密集型的,周作業是I/O密集型的。Alluxio極大地加速了周作業因為周作業的數據完全在內存中。性能瓶頸為I/O的作業已經被Alluxio加速成性能瓶頸為CPU的作業。我們可以看到CPU密集型的月作業的執行性能也有所提升,因為使用Alluxio避免了周作業與月作業競爭磁碟資源。

場景4

在最後一個場景中,月作業和周作業都是CPU密集型的。在這種情況下,Alluxio帶來的性能提升不明顯,這是因為兩種任務中I/O吞吐量都不是瓶頸。然而,通過持續地管理在內存中的數據,Alluxio使得作業的性能更為穩定。

結論

Alluxio提供了可預測的資源劃分和資源使用,使得系統管理員可以對外提供穩定的性能保證。此外,Alluxio可以給共享存儲資源的計算集群帶來顯著的性能收益。使用Alluxio的優勢隨著集群中需要訪問數據的作業數量增多會更加明顯。總的來說,當Alluxio使用在計算和存儲共同部署的環境中時,可以帶來兩點關鍵的性能收益:

  • 可預測的穩定性能使得SLA很容易滿足;
  • 獲得最可達10倍的性能提升。


熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦