最近項目須要用到MapReduce進行一個需求開發,對於一個初學者來講,任何入門的知識均可以經過www.baidu.com獲取。可是,百度並不可以幫咱們百分百的理解原理性的東西,由於任何一個框架、插件、源代碼,並不單單是System.out.print("Hello World !");這麼簡單。app
經過mrunit,能夠幫助咱們作mapreduce的單元測試,驗證程序以及代碼邏輯,what`s more,還對咱們理解mapreduce有很大的幫助。框架
首先,我是在https://my.oschina.net/cloudcoder/blog/285151初步瞭解MapReduceDriver的使用,瞭解完以後,再來講說我在使用mrunit的一點心得。函數
在個人MapReduce程序中,須要作全局數據共享,可瞭解DistributedCache,在新的hadoop版本中,已經集成到job裏,直接調用addCacheFile便可實現文件共享(文件在hdfs上面);而全局變量共享,經過 Configuration 的set函數便可實現。oop
對於mrunit,回調用到mapper.class的set跟map函數,因此MapReduceDriver也要將共享文件經過addCacheFile傳到mapper.class的set函數中。代碼以下:單元測試
MapReduceDriver<LongWritable, Text, Text, Text, Text, Text> mapReduceDriver = MapReduceDriver.newMapReduceDriver(new Mapper(), new Reducer());測試
Configuration conf = new Configuration();
conf.set("args[0]", "1");.net
// 必須先setConfiguration,再addCacheFile
mapReduceDriver.setConfiguration(conf);
mapReduceDriver.addCacheFile("sample.txt");前期工做準備好以後,就能夠對map的輸入輸出進行單元測試。插件
輸入能夠經過MapReduceDriver的withInput函數實現。code
輸出的預期結果能夠經過MapReduceDriver的withOutput函數實現。blog
最後,要調用MapReduceDriver的runTest運行。示例代碼以下:
mapReduceDriver.withInput(new LongWritable(),
new Text("benjarmin,jack,benjarmin"));
mapReduceDriver.withOutput(new Text("benjarmin"),new Text("2"));
mapReduceDriver.withOutput(new Text("jack"),new Text("1"));
mapReduceDriver.runTest();