私は10年ごとにグーグルグラムから発生するバイグラムの数を計算するmap-reduceプログラムを持っています。
私のパーティは、次のとおりです。
ローカルhadoopのmap-reduceを実行してもデータが予期したとおりに分割されない
public static class PartitionerClass extends Partitioner<Bigram, IntWritable> {
public int getPartition(Bigram key, IntWritable value, int numPartitions) {
String combined=key.getFirst().toString()+key.getSecond().toString()+key.getDecade().toString();
return combined.hashCode()%numPartitions;
}
}
私はブレークポイントを追加したが、プログラムコードのその部分を通過しません。
私の主:
Configuration conf = new Configuration();
Job job = new Job(conf, "first join");
job.setJarByClass(WordCount.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setPartitionerClass(PartitionerClass.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1])); ///SHOULD BE DECIDED
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapOutputKeyClass(Bigram.class);
job.setMapOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
期待通りのコードは、一部のデータが正しく処理されないで実行され、一部ではありません。
これをデバッグする方法は本当に分かりません。
アイデア
データによっては、正しく処理されていないものがありますか? – Serhiy
、取得しているnumPartitionsの値は何ですか...?メインメソッドでsetNumReduceTasksとして設定する必要があります。 – vefthym
一部のデータが正しく処理されません - データが間違ったレデューサーに送信されている場合があります(わかりません)。問題はnumPartitionsを設定しなかったことだと思います。設定する値をどのように知ることができますか。それはパーティーが何をしていますか? –