1. 程式人生 > 其它 >第二十一章 HDFS—叢集壓測

第二十一章 HDFS—叢集壓測

一、壓測準備

在企業中非常關心每天從Java後臺拉取過來的資料,需要多久能上傳到叢集?消費者關心多久能從HDFS上拉取需要的資料?
為了搞清楚HDFS的讀寫效能,生產環境上非常需要對叢集進行壓測。
HDFS的讀寫效能主要受網路和磁碟影響比較大。為了方便測試,將hadoop102、hadoop103、hadoop104虛擬機器網路都設定為100mbps。
100Mbps單位是bit;10M/s單位是byte ; 1byte=8bit,100Mbps/8=12.5M/s。

測試網速:來到hadoop102的/opt/module目錄,建立一個

[delopy@hadoop102 software]$ python -m SimpleHTTPServer

二、測試HDFS寫效能

1.寫測試底層原理

2.測試內容

#1.向HDFS叢集寫10個128M的檔案
[delopy@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

2021-09-09 10:43:16,853 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:             Date & time: Tue Feb 09 10:43:16 CST 2021
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:         Number of files: 10
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:  Total MBytes processed: 1280
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:       Throughput mb/sec: 1.61
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:  Average IO rate mb/sec: 1.9
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:   IO rate std deviation: 0.76
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:      Test exec time sec: 133.05
2021-09-09 10:43:16,854 INFO fs.TestDFSIO:

ps:nrFiles n為生成mapTask的數量,生產環境一般可通過hadoop103:8088檢視CPU核數,設定為(CPU核數 -  1)

> Number of files:生成mapTask數量,一般是叢集中(CPU核數-1),我們測試虛擬機器就按照實際的實體記憶體-1分配即可
> Total MBytes processed:單個map處理的檔案大小
> Throughput mb/sec:單個mapTak的吞吐量 
	計算方式:處理的總檔案大小/每一個mapTask寫資料的時間累加
	叢集整體吞吐量:生成mapTask數量*單個mapTak的吞吐量
> Average IO rate mb/sec::平均mapTak的吞吐量
	計算方式:每個mapTask處理檔案大小/每一個mapTask寫資料的時間 
     全部相加除以task數量
> IO rate std deviation:方差、反映各個mapTask處理的差值,越小越均衡

#2.注意:如果測試過程中,出現異常
1)可以在yarn-site.xml中設定虛擬記憶體檢測為false
<!--是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true -->
<property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>
2)分發配置並重啟Yarn叢集

3.測試結果分析

1)由於副本1就在本地,所以該副本不參與測試一共參與測試的檔案:10個檔案 * 2個副本 = 20個壓測後的速度:1.61實測速度:1.61M/s * 20個檔案 ≈ 32M/s三臺伺服器的頻寬:12.5 + 12.5 + 12.5 ≈ 30m/s所有網路資源都已經用滿。如果實測速度遠遠小於網路,並且實測速度不能滿足工作需求,可以考慮採用固態硬碟或者增加磁碟個數。2)如果客戶端不在叢集節點,那就三個副本都參與計算

三、測試HDFS讀效能

1.測試內容

#1.讀取HDFS叢集10個128M的檔案
[delopy@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

2021-09-09 11:34:15,847 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read
2021-09-09 11:34:15,847 INFO fs.TestDFSIO:             Date & time: Tue Feb 09 11:34:15 CST 2021
2021-09-09 11:34:15,847 INFO fs.TestDFSIO:         Number of files: 10
2021-09-09 11:34:15,847 INFO fs.TestDFSIO:  Total MBytes processed: 1280
2021-09-09 11:34:15,848 INFO fs.TestDFSIO:       Throughput mb/sec: 200.28
2021-09-09 11:34:15,848 INFO fs.TestDFSIO:  Average IO rate mb/sec: 266.74
2021-09-09 11:34:15,848 INFO fs.TestDFSIO:   IO rate std deviation: 143.12
2021-09-09 11:34:15,848 INFO fs.TestDFSIO:      Test exec time sec: 20.83

#2.刪除測試生成資料
[delopy@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -clean

2.測試結果分析

為什麼讀取檔案速度大於網路頻寬?
由於目前只有三臺伺服器,且有三個副本,資料讀取就近原則,相當於都是讀取的本地磁碟資料,沒有走網路。