在新的測試框架中,測試代碼被放置在:
中,而跟Framework相關(guān)的代碼都位于org.apache.hadoop.test.system中,而HDFS和MR相關(guān)的Herriot測試代碼,則分別位于org.apache.hadoop.hdfs.test.system, org.apache.hadoop.mapreduce.test.system中。
Example
這里以Herriot系統(tǒng)中真實(shí)的case src/test/system/test/org/apache/hadoop/mapred/TestCluster.java為例。
該用例中,從@BeforeClass開始,該before會創(chuàng)建一個cluster proxy的instance(在這里為一個mapreduce cluster),這個proxy能夠讓程序直接訪問MapReduce的daemons進(jìn)程(JT和TTs)。程序的第二行創(chuàng)建了mapreduce所有的daemon proxies,并通過Herriot library API讓這些daemons進(jìn)程都對測試程序可用。Herriot會保證測試環(huán)境是完全clean并且所有的內(nèi)部daemons的狀態(tài)都已經(jīng)reset。不僅如此,所有daemons進(jìn)程的log也都會被保存下來。這些log非常有用,可以讓開發(fā)和測試人員方便定位問題。@BeforeClass會確保所有的testcase在運(yùn)行時(shí),只有一個cluster proxy 的instance在服務(wù)。以避免沖突。
在測試中,要提交一個job到集群,也是非常簡單的,如下:
新的JT API調(diào)用submitAndVerifyJob(Configuration conf)來檢查提交的job是否已經(jīng)成功完成。并會跟蹤job運(yùn)行的details(比如運(yùn)行了多少map多少reduce),監(jiān)控job的progress和成功與否,并執(zhí)行相應(yīng)的cleanup。如果任意一個過程中發(fā)生異常,測試框架將會拋出異常。
下列代碼演示了如何修改一個集群的配置并將之重啟的過程。隨后又使用之前的配置再次進(jìn)行重啟。
1.1 測試用例執(zhí)行環(huán)境
執(zhí)行測試用例前,測試的client端需要滿足如下條件:
- l能夠訪問某個已有的支持Herriot的hadoop集群
- l相應(yīng)的hadoop配置文件目錄(通常在$HADOOP_CONF_DIR下)
運(yùn)行testcase的客戶端并不需要hadoop的binary包,Herriot test是使用source code直接通過運(yùn)行如下命令來執(zhí)行。
ant test-system -Dhadoop.conf.dir.deployed=${HADOOP_CONF_DIR}
這樣運(yùn)行test-system,會將有的testcase全部執(zhí)行一遍。如果只想運(yùn)行其中某一個testcase,只需要運(yùn)行時(shí)加上選項(xiàng) –Dtestcase=testname 就可以了。
當(dāng)test執(zhí)行完以后,執(zhí)行結(jié)果和日志都可以從 build-fi/system/test目錄下找到。
通常,test client都是在cluster的gateway上,但執(zhí)行test的client同樣也可以是一臺slave,筆記本等其他有權(quán)訪問cluster的機(jī)器。
更多詳細(xì)信息,請您微信關(guān)注“計(jì)算網(wǎng)”公眾號: