MRUnit(MapReduce用のテストライブラリ)を試す

昨日のHadoopソースリーディング4回目(Hadoopソースコードリーディングまとめ第4回 #hadoopreading)で、 @okachimachiorz1 さんが、MRUnit便利だし使うよね的な事をおっしゃっていて、 どんなもんかなと思ってチョロっと自動テストしてみました。

【環境】  1. EclipseMapReduceプラグイン   hadoop-0.20.2-eclipse-plugin.jar(Hadoopをインストールしたところのcontribに入ってる)を   eclipseプラグインディレクトリに突っ込んで再起動すると   ウィザードでMap/Reduce Projectが作れるようになります。   ⇒ Hadoopのインストールディレクトリを指定するとそこにパス通してくれる感じ。    2. JUnit4のjarを落としてパスを通す   HadoopのlibにはJUnit3.8しか入ってなかったので。   MRUnitのページみたら @Before とかJUnit4のアノテーションが前提みたいになってました。    3. MRUnitのjarを落としてパスを通す   ググったら↓に置いてありました。   https://repository.cloudera.com/index.html#nexus-search;classname~MRUnit   コレ、maven使ってれば依存関係の定義をpom.xmlに入れてやるだけでイケそうですね~     【実装】  使い方は↓こんな感じのようなので、、、  http://www.slideshare.net/emwendelin/testing-hadoop-jobs-with-mrunit  http://www.cloudera.com/blog/2009/07/debugging-mapreduce-programs-with-mrunit/    ↓こんな感じのMapperに、、 ======== public class HogeMapper extends MapReduceBase implements Mapper {   private Text word = new Text();   @Override   public void map(Object key, Object value, OutputCollector output,       Reporter reporter) throws IOException {     // TODO Auto-generated method stub     String line = value.toString();     StringTokenizer st = new StringTokenizer(line, ",");     while (st.hasMoreTokens()) {       word.set(st.nextToken());       output.collect(word, new IntWritable(1));     }   } } ========    ↓こんな感じのテストしてみました。 ======== public class HogeTest extends TestCase {   private Mapper mapper;   private MapDriver driver; ←こいつがMRUnitのオブジェクト   @Before   public void setUp() {     mapper = new HogeMapper();     driver = new MapDriver(mapper);   }   @Test   public void testHogeMapper() {     driver.withInput(new Text("foo"), new Text("aar,kar,sar,tar,aar"));     driver.withOutput(new Text("aar"), new IntWritable(1));     driver.withOutput(new Text("kar"), new IntWritable(1));     driver.withOutput(new Text("sar"), new IntWritable(1));     driver.withOutput(new Text("tar"), new IntWritable(1));     driver.withOutput(new Text("aar"), new IntWritable(1));     driver.runTest();   } } ========   インプットのファイルを用意しなくていいから楽チンって感じですかねぇ~