一、簡介

隨著企業收集和分析的數據量不斷增長,人們越來越關注會影響到性能的數據存儲成本的管理。Hadoop提供了一種可擴展且快速的方式來存儲和分析數據,但在Hadoop中存儲數據通常比對象存儲等替代方案的成本更高。

對於尋求可擴展、經濟高效存儲的企業而言,內部部署和雲部署(例如AWS S3)採用對象存儲的方案更普遍。然而,對象存儲相較於Hadoop性能更低,因此程序開發者可能不願意在兩者間進行權衡選擇。企業注重成本優勢,雲服務提供商的定價透明,但沒有很好地解決成本與性能的權衡。

Alluxio是一個虛擬分散式文件系統,它創建了一個統一化各種不同存儲系統的數據層,並且可以達到內存級別的訪問速度。數據無論存儲在Hadoop HDFS中,還是對象存儲中,都可以通過全局命名空間中的單個源進行訪問。這使得企業可以設計兩全其美的數據存儲方案,即在利用低成本存儲的同時不降低性能。

常用鏈接

  • Alluxio項目官網
  • Alluxio Inc網站
  • Alluxio在各大廠用例
  • 關注Alluxio微信公眾號

二、Alluxio概述

Alluxio是世界上第一個內存級別速度的虛擬分散式文件系統。它統一化數據訪問並橋接了計算框架和存儲。應用程序只需要與Alluxio連接即可訪問存儲在底層任何持久化存儲系統中的對象或文件數據。此外,Alluxio架構支持以內存級別速度訪問數據,以提供最快的I/O操作。

在大數據生態環境中,Alluxio是一個位於計算和存儲之間的數據層。它可以帶來明顯的性能提升,尤其在跨越多個數據中心的雲可用區。Alluxio抽象了底層持久化存儲系統中的對象或文件,為應用提供共享數據訪問。Alluxio兼容Hadoop和對象存儲,支持對持久化存儲的讀寫操作。現有的數據分析應用(如Hive,HBase和Spark SQL)可以直接在Alluxio上運行而無需更改任何代碼。三、當前的大數據存儲架構

最常見的大數據存儲架構包含了並置(co-located)的計算和存儲,具體地使用HDFS存儲系統作為MapReduce,Spark,Hive,Presto等計算框架的存儲,如圖1所示。數據和計算位於同一節點,計算和存儲緊耦合能夠帶來高性能但可擴展性和成本卻不容樂觀。擴展存儲的同時會迫使無需擴展的計算也進行了擴展(反之亦然)。隨著時間的推移,Hadoop集羣可能會變得龐大,並積累了大量較舊的,不太活躍的冷數據。

圖 1:使用Hadoop HDFS的傳統大數據體系結構

四、新的大數據存儲架構

部署Alluxio會創建一個帶有虛擬數據層的系統架構,從而統一存儲在HDFS和對象存儲中的數據,如圖2所示。集羣中的性能與僅有HDFS的配置情況相當,因為Alluxio會緩存來自對象存儲的數據。同時可以將不常使用的數據轉移到性價比最高的對象存儲,並且存儲和計算可以獨立擴展。

圖 2:使用Alluxio作為虛擬數據訪問層的大數據架構

在此存儲架構中,Alluxio提供以下功能:

? 現代的計算存儲分離的彈性架構:資源可以獨立管理和擴展,標準API和插件架構支持未來新技術的對接。? 統一化的數據層創建「虛擬數據湖」:在Alluxio全局命名空間中訪問對象和文件,就好像它們位於一個單個系統中。? 快速本地訪問重要且經常使用的數據,無需維護永久副本:Alluxio智能地只緩存所需的數據塊,而不是整個文件。? 通過將數據遷移到成本較低的商品存儲來優化存儲成本,而不會降低性能。? 靈活性:Alluxio中的數據可以在不同的工作負載和計算框架(如查詢,批處理分析和機器學習)之間共享。支持行業標準介面,包括HDFS和S3A。五、如何使用Alluxio部署和共享HDFS和對象存儲

為了說明對性能的影響,我們運行了一個簡單的測試,你可以在自己的環境中輕鬆復現。在實驗中,我們使用MapReduce,HDFS,Alluxio和AWS S3存儲桶創建了一個示例配置。實驗表明,雲的對象存儲與內部HDFS部署相比可以達到近似的性能表現。

集羣包含6個Amazon EC2實例(類型為M4.4XL)。該集羣配置了五個Alluxio工作節點分別與各自的HDFS DataNodes位於相同位置,每個工作節點都預留了30GB的內存。Name Node和Alluxio Master位於同一主機,此HDFS部署作為Alluxio根文件系統。

實驗運行如下:Teragen生成存儲在HDFS中的數據(100 GB),通過MapReduce對數據運行Terasort。然後,HDFS和S3存儲桶掛載到Alluxio命名空間下,利用Alluxio統一文件系統特性將現有數據從HDFS遷移到S3。最後,通過MapReduce對S3中的數據運行Terasort。

? 生成數據集

為了提供數據給Terasort,使用teragen在本地HDFS上生成100GB數據集:

$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 1000000000 /teraInput

? 運行Terasort(HDFS)

為了獲得基準性能,在本地HDFS運行Terasort。

$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort /teraInput /teraOutput

? 將數據遷移到S3

Alluxio統一文件系統功能提供了一種在支持的文件系統之間遷移數據的簡單方法。使用Alluxio shell命令將數據從本地HDFS遷移到S3。首先,將S3存儲桶掛載到Alluxio命名空間。

$ bin/alluxio fs mount --option aws.accessKeyId=<S3_KEY_ID> --option aws.secretKey=<S3_KEY> /s3-mount s3a://alluxio-terasort/input

? 通過Alluxio將數據集複製到S3

$ bin/alluxio fs cp -R /teraInput /s3-mount

根據你為Alluxio配置的寫入類型,可能需要手動將數據載入到Alluxio命名空間。

$ bin/alluxio fs load /s3-mount

? 運行Terasort(數據通過Alluxio來自S3 )

Terasort結果輸出到本地HDFS,以獲得數據讀取路徑的可靠性能。

$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort alluxio://<MasterHost:Port>/s3-mount/teraInput /teraOutput

六、結果

內部部署HDFS配置的總運行時間為39分鐘13秒。採用Alluxio從S3訪問數據,可使得總時間為37分鐘17秒,實際上快了近5%。

Alluxio支持任何提供標準介面的商業對象存儲平臺,包括內部部署和主要雲服務提供商給出的解決方案。如果想要自己嘗試Alluxio,你可以在幾分鐘內下載並開始使用,來加速AWS中的示例數據集或運行上述實驗。


推薦閱讀:
相關文章