過去の日記

2013-04-12 [長年日記]

MultipleInputsとFileInputFormat [java]

Hadoopで複数の入力ファイルに別々のMapperを使いたくなりました。
org.apache.hadoop.mapreduce.lib.input.MultipleInputsを使うことになります。

FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileInputFormat.addInputPath(job, new Path(otherArgs[1]));

と書いてあったソースを、

MultipleInputs.addInputPath(job, new Path(otherArgs[0]), FileInputFormat.class, FooMap.class);
MultipleInputs.addInputPath(job, new Path(otherArgs[1]), FileInputFormat.class, BarMap.class);

としました。


ところが、

Exception in thread "main" java.lang.RuntimeException: java.lang.InstantiationException

が出てしまいます。

?? となりましたが、当たり前でした。FileInputFormatは(なぜか)abstractなclassだったのです。

MultipleInputs.addInputPath(job, new Path(otherArgs[0]), TextInputFormat.class, FooMap.class);
MultipleInputs.addInputPath(job, new Path(otherArgs[1]), TextInputFormat.class, BarMap.class);

で動きました。


FileInputFormat.addInputPathで追加したパスはTextInputFormatで読みこまれている(らしい)のですが、それはどこに書いてあるんだろう?
……という疑問を残したままフェイドアウト。