MapReduce單元測試-mrunit

        最近項目須要用到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();

相關文章
相關標籤/搜索