MapReduce單元測試框架 MRUnit
MRUnit是由Couldera公司開發的專門針對 Hadoop中編寫MapReduce單元測試的框架,基本原理是JUnit4和 EasyMock。MR就是Map和Reduce的縮寫。MRUnit框架非常精簡,其核心的單元測試依賴于JUnit。而且MRUnit實現了一套 Mock對象來控制OutputCollector的操作,從而可以攔截OutputCollector的輸出,和我們的期望結果進行比較,達到自動斷言 的目的。
有了MRUnit,對MR程序做重構的時候,只要明確輸入和輸出,就可以寫出單元測試,并且在放到群集校驗前進行試驗,從而節省時間和資源,也 能更快的定位到問題。而進行重構的話,只要寫得足夠詳細的單元測試都是綠色的話,那么基本就可以保證在群集運行的結果也是正常的。
MRUnit不在Apache標準的Hadoop的發行版中,而是在Couldera公司的增強版本中hadoop- 0.20.1+133.tar.gz的contrib\mrunit\hadoop-0.20.1+169.56-mrunit.jar,已經貼在附件 中。只要把它和Junit4的jar添加到Hadoop程序項目的classpath中,就可以使用MRUnit了。
MRUnit包含四種 Driver:MapDriver,ReduceDriver,MapReduceDriver,PipelineMapReduceDriver。可以 根據自己的需要選擇合適的Driver。
給出一個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(); }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!