您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
使用MRUnit實現(xiàn)MapReduce程序的單元測試
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/4/3 14:05:25 ] 推薦標簽:

Hadoop的MapReduce程序的測試,一直比較麻煩。因為不方便抽取出來,作為獨立的Junit測試。所以很多時候,我們都是寫一個Main函數(shù),

然后在里面手工調(diào)用Map或者Reduce,用System.out.println打印出結(jié)果,人眼測試,而且還要判斷OutputCollector是否為空,不然直接

Main調(diào)用還會拋NullPointerException。
這樣大的弊端,是無法實現(xiàn)自動化的斷言判斷,達到測試驅(qū)動和檢查的目的。那么對程序的任何改動,都需要放到Hadoop集群上,跑個十

幾分鐘才能肯定到底對不對。我們需要一個更快的方法,能夠方便的自動化的對MR程序進行測試,從而達到測試驅(qū)動和敏捷開發(fā)的狀態(tài)。
What’s MRUnit:
MRUnit是由Couldera公司開發(fā)的專門針對Hadoop中編寫MapReduce單元測試的框架,基本原理是JUnit4和EasyMock。MR是Map和Reduce的縮

寫。MRUnit框架非常精簡,其核心的單元測試依賴于JUnit。而且MRUnit實現(xiàn)了一套Mock對象來控制OutputCollector的操作,從而可以攔截

OutputCollector的輸出,和我們的期望結(jié)果進行比較,達到自動斷言的目的。
Why MRUnit:
有了MRUnit,對MR程序做重構(gòu)的時候,只要明確輸入和輸出,可以寫出單元測試,并且在放到群集校驗前進行試驗,從而節(jié)省時間和資源

,也能更快的定位到問題。
而進行重構(gòu)的話,只要寫得足夠詳細的單元測試都是綠色的話,那么基本可以保證在群集運行的結(jié)果也是正常的。
How MRUnit:
MRUnit不在Apache標準的Hadoop的發(fā)行版中,而是在Couldera公司的增強版本中hadoop-0.20.1+133.tar.gz的contribmrunithadoop-

0.20.1+169.56-mrunit.jar,已經(jīng)貼在附件中。只要把它和Junit4的jar添加到Hadoop程序項目的classpath中,可以使用MRUnit了。
MRUnit包含四種Driver:MapDriver,ReduceDriver,MapReduceDriver,PipelineMapReduceDriver?梢愿鶕(jù)自己的需要選擇合適的

Driver。
MRUnit Example:

給出一個Reduce的很簡單例子,Reduce的邏輯是把Value中的各個值相加。

public class ExtractKeywordTest {
private Reducer<Text, Text, Text, Text> reducer;
private ReduceDriver<Text, Text, Text, Text> reduceDriver;
@Before
public void setUp() throws Exception {
reducer = new ExtractKeywordAcookie.Reduce();
reduceDriver = new ReduceDriver<Text, Text, Text, Text>(reducer);
}
@Test
public void testReduce() {
List<Text> values = new ArrayList<Text>();
values.add(new Text(1.0_0.1));
values.add(new Text(2.0_0.2));
values.add(new Text(3.0_0.3));
reduceDriver.withInput(new Text(20100106_00_IBM), values)
.withOutput(new Text(20100106_00_IBM_6.00_0.60_), null)
.runTest();
}

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd