2013-04-12
■MultipleInputsとFileInputFormat
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で読みこまれている(らしい)のですが、それはどこに書いてあるんだろう?
……という疑問を残したままフェイドアウト。
