第二十一章 HDFS—叢集壓測
阿新 • • 發佈:2021-09-09
一、壓測準備
在企業中非常關心每天從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.測試結果分析
為什麼讀取檔案速度大於網路頻寬?
由於目前只有三臺伺服器,且有三個副本,資料讀取就近原則,相當於都是讀取的本地磁碟資料,沒有走網路。