昨日のHadoopソースリーディング4回目(Hadoopソースコードリーディングまとめ第4回 #hadoopreading)で、
@okachimachiorz1 さんが、MRUnit便利だし使うよね的な事をおっしゃっていて、
どんなもんかなと思ってチョロっと自動テストしてみました。
【環境】
1. EclipseのMapReduceプラグイン
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();
}
}
========
インプットのファイルを用意しなくていいから楽チンって感じですかねぇ~
コメント