Alluxio 1.4版本的重要新特性介紹
Alluxio 1.4.0已經發布了大量的新功能和改進。本篇博客介紹Alluxio 1.4.0開源版本的一些重要特性。
• 改進的Alluxio底層存儲API
• 文件係統REST接口
• 數據包流
1.改進的Alluxio底層存儲API
Alluxio是計算和數據存儲之間的橋梁。底層存儲API的初始版本是Alluxio文件係統API的鏡像,並針對底層存儲係統進行了裁剪,這些底層存儲係統提供了類HDFS的文件係統API。對象存儲,無論是公共的還是私有的,已經日益成為各種用例的後台存儲選擇。因此,底層存儲 API需要改進,以更好地為對象存儲和文件係統存儲提供最好的服務。
對象存儲具有扁平的命名空間,其隻有一個位於頂層的類似目錄的實體(桶)。但它可以創建偽目錄,就好像底層存儲中的目錄一樣。由於對象存儲API不區分文件對象和目錄對象,文件係統API對於對象存儲是非常低效的。例如,UFS API中刪除路徑指令並不知道該路徑指向的是文件還是目錄,必須調用遠程查詢獲取該元數據。由於與遠程存儲係統通信存在延遲,對象存儲之上的元數據操作代價是非常高的。在Alluxio 1.4.0中,UFS API已經更新以更好地處理這樣的情況,其依據是在大部分情況下,使得這些調用高效的額外元數據往往已經被Alluxio獲取了。
改進底層存儲API使Alluxio對對象存儲更友好主要有以下兩個優勢:
- 優化的對象存儲連接器:除文件係統外,改進的適用於對象存儲的UFS API顯示出顯著的性能優勢。
- 簡化的對象存儲集成:對象存儲的新抽象意味著將對象存儲集成到Alluxio更容易。不必擔心其他對象存儲共有的模式,隻要在Java客戶端為與特定對象存儲通信的REST接口實現一個輕量級包裝器就足夠了。
1.1 優化的對象存儲連接器
Alluxio 1.4.0在對象存儲上的小文件和小規模讀取的性能方麵有了重大改進。改進UFS API提升了對象存儲中獲取元數據的性能。下麵的實驗數據可以表明了帶來的好處:
1.1.1 創建或刪除空文件的性能
在Alluxio 1.4.0帶來的變化中,受到顯著影響的操作之一是在底層存儲中創建零字節文件。對於寫性能,在S3A中提升了5倍,在Ceph中提升了10倍。注意,對Ceph的性能提升更大;Alluxio 1.3.0中針對S3A的優化,即稱為ObjectUnderFileSystem的新抽象,現在也適用於所有其他對象存儲。另一個受到較大影響的操作是刪除,在S3A和Ceph中分別帶來了3倍與15倍的性能提升。
1.1.2 粗略計算
一個擁有10Gbps網絡鏈路(約1Gbps用於計算)的數據中心在Alluxio和遠程存儲集群之間有1ms 的傳輸時延。在此鏈路上傳輸1MB數據塊的I / O時間為1MB / 1GBps = 1 ms。在寫1MB文件時,create操作中元數據的往返次數將從10減少到1(在Ceph中提升了10倍),執行總時間從11ms(10ms+1ms)減少到2ms(1ms+1ms),獲得了超過5倍的性能提升。以此類推,對於10MB的數據塊將會得到約兩倍的性能提升。以上例子說明了優化元數據性能是如何有效改善小文件和小規模讀取性能的。在遠程存儲集群網絡距離非常遙遠時,性能提升將變得更加明顯。
1.2 簡化的對象存儲集成
類似於REST接口客戶端支持的功能,如今集成新的對象存儲僅需要實現少得多的方法。隻需要原先實現的方法中的一半即可。在源代碼行數方麵,現在僅需要不到400行代碼即可完成新的對象存儲的集成,不到原來的一半。
2.文件係統原生REST接口
新引入的REST接口提供了與Alluxio native Java API的對等性,其目的是促進非Java環境與Alluxio的交互。
REST接口通過名為Alluxio proxy的Alluxio進程實現,該進程使用一個內部Alluxio Java客戶端對REST接口和Alluxio服務器之間的通信進行代理。
- 在本地通過 . /bin/alluxio-start.sh本地命令,啟動本地Alluxio集群
- 通過 ./bin/alluxio-start.sh all命令啟動所有Alluxio master和Alluxio worker進程
- 顯式地調用 ./bin/alluxio-start.sh proxy命令,在本地啟動代理進程
2.1 API
REST API由兩種類型的端點組成:
- path: https://:/api/v1/paths///
- stream: https://:/api/v1/streams///
host參數可以是運行Alluxio代理的任何機器。
端點path通過路徑執行給定的操作(例如,列表狀態,創建或刪除文件)。其餘參數以JSON對象的形式傳遞到端點。
一些path端點,特別是在創建文件或打開文件時,會創建一個流並返回一個整數句柄id。 此句柄可用於調用流端點以執行給定操作(例如讀取,寫入或關閉)。
2.2 Examples
本節通過curl命令與本地Alluxio代理進行通信介紹一些REST API的功能。
2.2.1 新建目錄
以下命令創建/ hello / world目錄; 參數 recursive = true用於遞歸創建缺少的父目錄:
curl -v -H "Content-Type: application/json" -X POST -d '{"recursive":"true"}' https://localhost:39999/api/v1/paths//hello/world/create-directory
2.2.2 列出目錄
以下命令列出/ hello目錄的內容:
curl -v -X POST https://localhost:39999/api/v1/paths//hello/list-status
2.2.3 刪除目錄
以下命令刪除/ hello目錄的內容; recursive = true參數用於遞歸刪除目錄:
curl -v -H "Content-Type: application/json" -X POST -d '{"recursive":"true"}' https://localhost:39999/api/v1/paths//hello/delete
2.2.4 上傳文件
以下命令創建/hello-world.txt文件,寫入內容並將其關閉:
curl -v -X POST https://localhost:39999/api/v1/paths//hello-world.txt/create-file
1//代理創建一個上傳“流”並返回其ID
curl -v -H "Content-Type: application/octet-stream" -X POST -d 'Hello World!' https://localhost:39999/api/v1/streams/1/write
//向文件中寫入“hello world”
curl -v -X POST https://localhost:39999/api/v1/streams/1/close
//關閉流
2.2.5 下載文件
以下命令打開/hello-world.txt文件,讀取內容並將其關閉:
curl -v -X POST https://localhost:39999/api/v1/paths//hello-world.txt/open-file
2 // //代理創建一個下載“流”並返回其ID
curl -v -X POST https://localhost:39999/api/v1/streams/2/read
Hello World!
curl -v -X POST https://localhost:39999/api/v1/streams/2/close
// 關閉流
2.3 性能
為了獲得最佳性能,我們建議將Alluxio代理與Alluxio服務進程放在一起。這可以讓非java應用以內存級的速度訪問存儲在Alluxio中的數據,同時最小化Alluxio代理和Alluxio服務之間額外網絡的開銷。
3.數據包流
Alluxio 1.4.0引入了一種新的網絡傳輸協議,旨在充分利用Alluxio組件之間的可用網絡帶寬。為了實現這一點,我們減少了網絡傳輸期間使用的緩存,並且依賴於使用連續流傳輸協議取代數據傳輸中的請求-響應協議。
3.1 優勢
1.在標準網絡中高達2倍的I / O性能改進,以及在高延遲吞吐量產品環境下取得更好的結果
2.最優化少量讀取和隨機讀取,無需調整配置
3.2 協議細節
通過使用這種方法,我們能確保網絡管道持續飽和,因為我們不需要發送周期性的額外數據請求。而按照原來的方法,在讀取請求的往返時間內,網絡管道將處於空閑狀態。這將帶來顯著的I/O性能改進,特別是在往返時間相當長並且可用吞吐量大的情況下。
此外,數據傳輸的單位已縮減為一個數據包(默認為64KB)。 使用流協議,更小的分組不會影響大規模順序I/O的工作負載,因為存在恒定數量的setup/teardown消息。 不僅如此,小分組也有利於少量讀取,因為讀取的數據的總量更接近讀取者請求的量。 因此,分組流可以滿足兩種工作負載類型的客戶端,而不需要不同的配置。
數據包流式傳輸目前仍處於試驗階段,我們將在未來版本中積極改進此功能,以進一步提高Alluxio的性能和易用性。
4.更多內容
該博客隻強調了Alluxio 1.4.0中的一些新功能和改進。詳細列表,請查看發行說明。
您可以按照快速入門指南輕鬆開始使用Alluxio開源版本或社區版本。
版權申明:本文由南京大學顧榮等專家翻譯整理自Alluxio公司技術博客,由Alluxio公司授權雲棲社區及CSDN首發(聯合),版權歸Alluxio公司所有,未經版權所有者同意請勿轉載。
最後更新:2017-09-01 10:02:59