hadoop的儲存系統hdfs在大資料領域有著無可比擬的地位,本篇文章對hdfs的儲存效能做乙個相對詳細的測試,影響因素有哪些,來幫助我們優化部署應用程式和hadoop集群,最大化利用hadoop的吞吐能力。
hdfs是hadoop分布式計算中的資料儲存系統
。在hdfs中,檔案的讀寫過程就是client和namenode以及datanode一起互動的過程。namenode管理著檔案系統的元資料,datanode儲存的是實際的資料,那麼client就會聯絡namenode以獲取檔案的元資料,而真正的檔案讀取操作是直接和datanode進行互動的。所以儲存過程大致如下:
client要向集群中寫入資料,首先詢問namenode,namenode告知客戶端向哪datanode寫入資料,在往datanode寫入資料的同時,datanode與namenode保持心跳,如果datanode在執行任務失敗,namenode會通過心跳機制得知datanode死掉,將重新分配新的任務到其他的datanode,架構圖如下圖所示。
hdfs的副本放置車策略遵循以下幾點(最優副本數為3):
1) 第一副本:放置在上傳檔案datanode,如果是集群外提交,由namenode選擇一台磁碟不太滿,cpu不太忙的節點。
2) 第二副本:放置在於第一副本不同的機架的節點上。
3)第三副本:與第二個副本相同集群的節點。
4)其他副本則隨機選取節點。
測試環境:linux 3.10.0-229.el7.x86_64
網路頻寬:實測35mb/s-40mb/s
機器記憶體:32gb
硬碟空間:1t
硬碟io:實測300mb/s
hadoop版本:2.6
jdk版本:1.8
以下所有測試客戶端和集群節點都不在同一臺機器上,單個測試檔案大小為100m。
偽分布式測試結果:
集群節點數(個)
副本數(個)
客戶端數量(個)
平均速度(mb/s)
吞吐量(mb/s) 1
1 131 31
1 12 18
36 1
1 313 39
1 31 31
31 1
3 218 36
初步分析結論:上傳速度受客戶端數量影響,不受副本數影響,並行客戶端越多,單個寫入速度越慢,集群吞吐量有小幅度提公升,不超過網路頻寬。
五節點集群(1個namenode,4個datanode):
集群節點數(個)
副本數(個)
客戶端數量(個)
平均速度(mb/s)
吞吐量(mb/s) 5
1 131 31
5 12 30
60 5
1 330 90
5 14 30
120 5
1 522
110 5
3 131 31
5 32 17
34 5
3 312 36
5 34 10
40
初步分析結論:上傳速度受副本數和客戶端數量影響。在副本數為1的情況下,客戶端數量越多,吞吐量越高,當客戶端數量達到datanode節點數量的時候吞吐量幾乎不變;在副本數為3的時候,客戶端數量越高,平均速度越低,但是集群吞吐量有小幅度提公升,但不超過頻寬。
在16節點的hadoop集群環境下,網路為萬兆網,假設1個namenode節點,15個datanode,那麼理論上集群的總吞吐量為15gb/s(即吞吐量可隨節點數增加而線性增長),但是由於io效能的限制,每台機器(按照固態硬碟)的最大吞吐量也就250mb/s左右,那麼集群最大吞吐量為3.5gb/s左右(不跑任何hadoop以外的程式)。
在極限情況下,單個客戶端最大io速度為250mb/s,如果副本數為3的話,一秒內的總流量為750mb,萬兆網是完全可以支撐的。如果多個客戶端的話,由於受集群吞吐量的影響會有所下降,大致滿足以下公式關係(客戶端數量為n,資料節點數量為m,網路頻寬為b,副本數字p):
1)如果p * n < m,那麼每台客戶機的速度都可以達到io極限。
2)如果p * n > m,那麼平均速度為r= m * b/(p * n * 8)
上面算出來的速度並不是絕對的,因為不同的客戶端可能會同時路由block到同乙個datanode,不過在海量資料的情況下,大致可以達到負載均衡。
效能測試及優化
效能測試大概花了9 10個小時,快要趕上編碼所需的時間了.很多時間不是花在編碼上,而是尋找改進思路和查詢文件上.這一版花的時間最長,大概佔了一半時間,是因為要對整個生成數獨進行重構,而後幾版只是區域性優化.對首版的sudoku1.0進行效能測試 問題發現在生成1000000個數獨的情況下,生成的時間...
測試 HDFS讀寫效能
向hdfs集群寫入 10 個 128m的檔案 hadoop jar opt module hadoop 2.7.2 share hadoop mapreduce hadoop mapreduce client jobclient 2.7.2 tests.jar testdfsio write nrf...
HDFS效能優化與學習筆記
hdfs聯邦策略。檔案系統吞吐量不受單個namenode限制,向群集新增更多namenodes可擴充套件檔案系統的讀 寫吞吐量。機架感知的放置策略的目的是提高資料可靠性,可用性和網路頻寬利用率。對於常見情況,當複製因子為3時,hdfs的放置策略是將乙個副本放在本地機架中的乙個節點上,另乙個放在本地機...