HDFS性能測試及優化部署

hadoop的存儲系統hdfs在大數據領域有着無可比擬的地位,本篇文章對hdfs的存儲性能做一個相對詳細的測試,影響因素有哪些,來幫助我們優化部署應用程序和hadoop集羣,最大化利用hadoop的吞吐能力。

1.1 HDFS存儲機制

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)其他副本則隨機選取節點。

 

1.2 測試數據

測試環境: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

1

31

31

1

1

2

18

36

1

1

3

13

39

1

3

1

31

31

1

3

2

18

36

初步分析結論:上傳速度受客戶端數量影響,不受副本數影響,並行客戶端越多,單個寫入速度越慢,集羣吞吐量有小幅度提升,不超過網絡帶寬。

 

五節點集羣(1個NameNode,4個DataNode):

集羣節點數(個)

副本數(個)

客戶端數量(個)

平均速度(MB/S)

吞吐量(MB/S)

5

1

1

31

31

5

1

2

30

60

5

1

3

30

90

5

1

4

30

120

5

1

5

22

110

5

3

1

31

31

5

3

2

17

34

5

3

3

12

36

5

3

4

10

40

初步分析結論:上傳速度受副本數和客戶端數量影響。在副本數爲1的情況下,客戶端數量越多,吞吐量越高,當客戶端數量達到DataNode節點數量的時候吞吐量幾乎不變;在副本數爲3的時候,客戶端數量越高,平均速度越低,但是集羣吞吐量有小幅度提升,但不超過帶寬。

 

1.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,不過在海量數據的情況下,大致可以達到負載均衡。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章