0
我有一个map-reduce程序,可以根据每个十年的谷歌ngram计算出现的bigrams数量。
我的分区是:
运行本地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
和你正在获得的numPartition的值是什么...?您应该在主要方法中将setNumReduceTasks设置为 – vefthym
某些数据处理不正确 - 在某些情况下(我无法确定哪些数据正在发送到错误的缩减器)。我认为问题是我没有设置numPartition。我如何知道要设置的值。分区器不是做什么的? –