Hadoop 叢集基準測試
一、測試條件
叢集完整安裝配置後,應立即開始基準測試。基準測試時叢集裡不應該運行其他一切任務。
二、測試目標
1. 硬碟故障:新系統最常見的故障。可以通過運行高強度的IO基準測試程式集中測試。例如TestDFSIO
2. MapReduce的效能
三、測試方法
1、TestDFSIO基準測試HDFS
測試順序應該是先寫測試後讀測試
寫測試:
使用10個map任務寫10個檔案,每個500m。
hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -write -nrFiles 10 -fileSize 1000
在啟動並執行最後,結果被寫入控制台並記錄到當前路徑TestDFSIO_results.log 。
資料預設寫入 /benchmarks/TestDFSIO目錄下
讀測試:
hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -read-nrFiles 10 -fileSize 1000
清除測試資料:
hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -clean
2、用sort排序測試MapReduce
Hadoop內建一個部分排序的程式。這對測試整個MapReduce系統很有用,因為整個輸入資料集都會通過洗牌傳輸至reducer。一共三個步驟:產生一些隨機的資料,執行排序,然後驗證結果。
首先我們通過使用RandomWriter產生一些隨機的資料。它以每個節點10個map的方式運行一個MapReduce作業,並且每一個map產生近似10GB的隨機位元據,帶有不同長度的鍵和值。
hadoop jar hadoop-examples-0.20.2-cdh3u1.jar randomwriter random-data
3、TeraSort 基準測試實驗
1TB排序通常用于衡量分布式資料處理架構的資料處理能力。Terasort是Hadoop中的的一個排序作業,在2008年,Hadoop在1TB排序基準評估中贏得第一名,耗時209秒。
首先執行 teragen 產生資料
寫入1000000 行,每行100位元組。格式:
(10 bytes key) (10 bytes rowid) (78 bytes filler) \r \n
如
.t^#\|v$2\ 0AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHH
hadoop jar hadoop-examples-0.20.2-cdh3u1.jar teragen 1000000 terasort/1000000-input
查看資料
hadoop fs -ls /usr/hadoop/terasort/1000000-input
hadoop jar hadoop-*-examples.jar terasort in-dir out-dir
排序
hadoop jar hadoop-examples-0.20.2-cdh3u1.jar terasort terasort/1000000-input terasort/1000000-output
查看排序
hadoop fs -ls terasort/1000000-output
4、 Gridmix 基準測試
Hadoop Gridmix是針對hadoop系統的基準測試程式。它具備評測大規模資料處理系統所需的各個功能模組,包括:產生資料,產生並提交作業,統計作業完成時間等。本文主要介紹了Hadoop 0.20.2中內建的Gridmix2基準測試程式(位於\src\benchmarks目錄下)的設計原理及使用方法。
作業種類
Gridmix通過類比hadoop cluster中的實際負載來評測hadoop效能。它首先根據使用者設定的參數產生大量資料和一批作業,然後同時提交這些作業(批處理),最後統計出這批作業的已耗用時間。為了儘可能地類比現實中的各種作業,Gridmix內建了各種具有代表性的作業,分別為streamSort,javaSort,webdataScan,combiner(這個作業只是對結果進行了壓縮),monsterQuery,webdataSort,可以將這些作業分為以下幾類:
(1) 三階段map/reduce作業
輸入:500G壓縮(等價於2T未壓縮的)SequenceFile
(key,value)=(5 words,100 words)
計算1:map保留10%的資料,reduce保留40%資料,
計算2:map保留10%的資料,reduce保留40%資料,資料來自[計算1]的輸出
計算3:map保留10%的資料,reduce保留40%資料,資料來自[計算2]的輸出
動機:很多作業負載是流水式 map/reduce 作業,包括pig
對應作業:monsterQuery
(2) 大規模資料排序,其中key和value長度都是變化的
輸入:500G壓縮(等價於2T未壓縮的)SequenceFile
(key,value)=(5-10 words,100-10000 words)
計算:map保留100%的資料,reduce保留100%資料
動機:處理大規模的壓縮資料是非常常見的
對應作業:webdataSort
(3) 過濾
輸入:500G壓縮(等價於2T未壓縮的)SequenceFile
(key,value)=(5-10 words,100-10000 words)
計算:map保留0.2%的資料,reduce保留5%資料
動機:對大資料集進行過濾是很常見的
對應作業:webdataScan
(4) API 文本排序(直接調用一些API進行排序)
輸入:500G未壓縮文本
(key,value)=(1-10 words,0-200 words)
計算:map保留100%的資料,reduce保留100%資料
動機:map/reduce直接調用庫函數進行排序
對應作業:streamSort,javaSort,其中streamSort使用了shell命令cat作為mapper和reducer(這並不是排序,只是簡單的進行漸進式掃描),javaSort調用了java中的API進行排序。
Gridmix產生的一個基準負載包含不同數量的各種類型的作業,且每種作業處理的資料量也不同。使用者可以在一個xml檔案中配置作業數量和資料量,Gridmix會根據這個設定檔構造相應的作業,提交到叢集中並監控它們的執行情況直到所有作業完成。
使用方法
(1) 編譯
在/home/hadoop/hadoop_install/src/benchmarks/gridmix2下,輸入“ant”,會在build目錄下產生gridmix.jar檔案,把它copy到gridmix目錄下。
(2) 配置環境變數
修改指令碼gridmix-env-2中的以下幾個變數值:
HADOOP_HOME:hadoop安裝路徑
HADOOP_VERSION:hadoop版本,如hadoop-0.20.2
HADOOP_CONF_DIR:conf路徑,如${HADOOP_HOME}/conf
USE_REAL_DATA:是否使用大的資料集(2TB),如果設為false,預設資料量是2G。使用者可以在generateGridmix2Data.sh根據需要配置。
(3) 配置作業資訊
Gridmix提供了一個預設的gridmix_conf.xml,使用者可以根據自己的需要作修改。修改的內容可以是:作業的類型和數量,作業處理的資料量,reduce task數目,是否對資料結果進行壓縮等。需要注意的是,使用者可以配置多個不同reduce數量的同一類型作業,比如:
<property>
<name>javaSort.smallJobs.numOfJobs</name>
<value>8,2</value>
<description></description>
</property>
<property>
<name>javaSort.smallJobs.numOfReduces</name>
<value>15,70</value>
<description></description>
</property>
上面的例子設定了10個java sort小作業,其中8個每個帶有15個reduce task,另外2個每個帶70個reduce task。
在Gridmix中,每種作業有大中小三種類型,小作業只有3個map task(只處理{part-00000,part-00001,part-00002}三塊資料);中作業的task 數目與資料總量有關,它處理與Regex{part-000*0,part-000*1,part-000*2}匹配的資料區塊,比如有10個資料區塊,分別是part-00000,part-00001,part-00002…part-0009,則中作業只會處理前三塊;大作業會處理所有資料。
(4) 產生資料
使用generateGridmix2Data.sh指令碼產生資料,使用者可以根據需要配置資料量。在Gridmix中,資料壓縮率是4x。
(5) 運行
首先確保hadoop叢集已經啟動,然後運行./rungridmix_2,該指令碼會建立start.out記錄作業運行開始時間,作業結束時,建立end.out記錄完成時間。
總結
Hadoop Gridmix由兩個版本,本文討論的是第二個版本,即Gridmix2。.Gridmix2具有很好的擴充性,使用者可以很容易地添加其它作業,同時它能很好的類比批處理情況。但缺點是它不能類比隨機提交作業(比如按泊松分布進行提交)的應用情境。