大資料實戰(八十八):電商數倉(七十二)叢集測試(一)叢集效能測試
1 DFSIO測試
在Hadoop中包含很多的基準測試,用來驗證叢集的HDFS是不是設定合理,效能是不是達到預期,DFSIO是Hadoop的一個基準測試工具,被用來分析叢集HDFS的I/O效能。
DFSIO後臺執行MapReduce框架,其中Map任務以並行方式讀寫檔案,Reduce任務用來收集和彙總效能數字。可以通過這個基準測試對比吞吐量、IO速率的結果以及整個磁碟的原始速度,來確定你的叢集是否得到了期待的效能。另外,可以通過這些測試中指標的嚴重偏差發現叢集中一個或多個問題節點,結合監控系統一起使用能夠更好的定位Hadoop叢集的瓶頸所在。
1.1 寫效能測試
執行以下命令來執行HDFS寫效能測試,其中引數
請注意,由於部署了Kerberos,HDFS不允許任意讀寫,此時需要kinit某個使用者,然後指定TestDFSIO的寫目錄,指定方法為:
新增引數-D test.build.data=/user/使用者名稱/benchmark
由於我們yarn配置了允許的使用者:
所以用以上使用者來測試,這裡我選擇hive使用者。
[root@hadoop102 ~]# kinit -kt /var/lib/hive/hive.keytab hive/hive [root@hadoop102~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -Dtest.build.data=/user/hive/benchmark -write -nrFiles 100 -fileSize 10 19/09/02 11:04:02 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write 19/09/02 11:04:02 INFO fs.TestDFSIO: Date & time: Mon Sep 0211:04:02 CST 2019 19/09/02 11:04:02 INFO fs.TestDFSIO: Number of files: 100 19/09/02 11:04:02 INFO fs.TestDFSIO: Total MBytes processed: 1000.0 19/09/02 11:04:02 INFO fs.TestDFSIO: Throughput mb/sec: 23.839607123274607 19/09/02 11:04:02 INFO fs.TestDFSIO: Average IO rate mb/sec: 31.309106826782227 19/09/02 11:04:02 INFO fs.TestDFSIO: IO rate std deviation: 11.908672884305311 19/09/02 11:04:02 INFO fs.TestDFSIO: Test exec time sec: 243.639
1.2 讀效能測試
效能基準測試針對HDFS的讀操作進行,讀操作將用到第一步的寫操作,因此寫操作必須在讀操作之前執行。
[root@hadoop102 ~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -D test.build.data=/user/hive/benchmark -read -nrFiles 100 -fileSize 10 19/09/02 11:23:19 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read 19/09/02 11:23:19 INFO fs.TestDFSIO: Date & time: Mon Sep 02 11:23:19 CST 2019 19/09/02 11:23:19 INFO fs.TestDFSIO: Number of files: 100 19/09/02 11:23:19 INFO fs.TestDFSIO: Total MBytes processed: 1000.0 19/09/02 11:23:19 INFO fs.TestDFSIO: Throughput mb/sec: 383.4355828220859 19/09/02 11:23:19 INFO fs.TestDFSIO: Average IO rate mb/sec: 408.2528991699219 19/09/02 11:23:19 INFO fs.TestDFSIO: IO rate std deviation: 99.7095391341952 19/09/02 11:23:19 INFO fs.TestDFSIO: Test exec time sec: 218.765
1.3 清理測試資料
[root@hadoop102 ~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -D test.build.data=/user/hive/benchmark -clean
1.4 測試參考
在某一叢集執行此命令,此叢集配置10個datanode和3個namenode,每個節點採用10塊2T硬碟,128G記憶體,32核CPU,採用雙千兆網口,結果如下:
序號 |
操作 |
檔案數目 |
檔案大小 |
吞吐量(mb/sec) |
平均IO速率(mb/sec) |
IO速率標準差 |
消耗時間(sec) |
1 |
寫 |
100 |
1000 |
31.01 |
134.33 |
285.7 |
74.52 |
2 |
寫 |
1000 |
100 |
79.53 |
129.08 |
119.17 |
116 |
3 |
寫 |
1000 |
1000 |
17.59 |
34.45 |
65.44 |
431.6 |
4 |
讀 |
10 |
100 |
58.63 |
64.07 |
20.79 |
34.05 |
5 |
讀 |
1000 |
100 |
8.07 |
10.49 |
6.33 |
104.78 |
6 |
讀 |
1000 |
1000 |
5.64 |
6.13 |
1.84 |
1220.84 |
2 TeraSort測試
Hadoop的TeraSort是一個常用的測試,目的是利用MapReduce來儘可能快的對資料進行排序。TeraSort使用MapReduce框架通過分割槽操作將Map過程中的結果輸出到Reduce任務,確保整體排序的順序。TeraSort測試可以很好的對MapReduce框架的每個過程進行壓力測試,為調優和配置Hadoop叢集提供一個合理的參考。
2.1 生成測試資料
在進行TeraSort測試之前的一個準備過程就是資料的產生,可以使用teragen命令來生成TeraSort測試輸入的資料。teragen命令的第一個引數是記錄的數目,第二個引數是生成資料的HDFS目錄。下面這個命令在HDFS的terasort-input目錄中生成1GB的資料,由1千萬條記錄組成。
[root@hadoop102 ~]# time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 10000000 /user/hive/terasort-input
注:time是linux下的命令,可以獲取到一個程式的執行時間,包括程式的實際執行時間(real time),以及程式執行在使用者態的時間(user time)和核心態的時間(sys time)。
2.2 執行測試
對於TeraSort第一個引數是HDFS上輸入檔案的路徑,第二個引數是HDFS上輸出結果的路徑。
[root@hadoop102 ~]# time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort /user/hive/terasort-input /user/hive/terasort-ouput real 1m18.180s user 0m6.707s sys 0m1.696s
2.3 驗證
驗證TeraSort基準測試程式結果的正確性,可以使用teravalidate命令來執行。第一個引數是排序的結果集的HDFS上的位置。第二個引數是驗證結果集正確性的報告存放位置。
[root@hadoop102 ~]# time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teravalidate /user/hive/terasort-ouput /user/hive/terasort-validate [root@hadoop102 ~]# hadoop fs -cat /user/hive/terasort-validate/part-r-00000 checksum 4c49607ac53602
該檔案有內容,說明結果是有序的。
2.4 測試參考
在某一叢集執行此命令,此叢集配置10個datanode和3個namenode,每個節點採用10塊2T硬碟,128G記憶體,32核CPU,結果如下:
TeraSort命令耗時46.553s