Reducer
行キーは事前に計算され、その段階では情報が利用できないため、行キーを に渡したい/渡す必要があります。(Reducer
は a を実行しますPut
)
最初に、内部クラスを使用しようとしました。
public class MRMine {
private byte[] rowkey;
public void start(Configuration c, Date d) {
// calc rowkey based on date
TableMapReduceUtil.initTableMapperJob(...);
TableMapReduceUtil.initTableReducerJob(...);
}
public class MyMapper extends TableMapper<Text, IntWritable> {...}
public class MyReducer extends TableReducer<Text, IntWritable, ImmutableBytesWritable> {...}
}
両方ともMyMapper
、MyReducer
デフォルトのコンストラクターが定義されています。ただし、このアプローチでは次の例外が発生します。
java.lang.RuntimeException: java.lang.NoSuchMethodException: com.mycompany.MRMine$MyMapper.<init>()
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
Caused by: java.lang.NoSuchMethodException: com.company.MRMine$MyMapper.<init>()
at java.lang.Class.getConstructor0(Class.java:2730)
at java.lang.Class.getDeclaredConstructor(Class.java:2004)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:109)
内部クラスを static ( Runtimeexception: java.lang.NoSuchMethodException: tfidf$Reduce.<init>() ) と宣言することで例外を取り除きました。しかし、その後、rowkey
静的も作成する必要があり、複数のジョブを並行して実行しています。
https://stackoverflow.com/a/6739905/1338732のconfigure
メソッドが上書きされているところを見つけましたReducer
が、もう利用できないようです。とにかく、値を渡すことができません。
新しいキーと値のペアを追加するだけで、構成を (誤) 使用 (?) することを考えていましたが、これは機能しますか?正しいアプローチですか?
カスタム値をレデューサーに渡す方法はありますか?
私が使用しているバージョンは次のとおりです: hbase: 0.94.6.1
, hadoop:1.0.4