我今天正在研究分区器。它是 hadoop 自定义分区器中的基本程序。下面是我的分区程序代码片段。
公共类 VowelConsPartitioner 扩展 Partitioner {
@Override
public int getPartition(Text letterType, IntWritable count, int redCnt) {
// TODO Auto-generated method stub
//System.out.println("reduce cnt in partitioner: "+redCnt);
if(letterType.toString().equalsIgnoreCase("vowel")){
//System.out.println("vowel sound: "+1%redCnt);
return letterType.toString().hasCode()%redCnt;
}
if(letterType.toString().equalsIgnoreCase("consonent")){
//System.out.println("Cons sound: "+2%redCnt);
return letterType.toString().hasCode()%redCnt;
}
else
return 0;
}
}
我像这样在我的驱动程序类中设置了减速器....
job.setNumReduceTasks(3); job.setPartitionerClass(VowelConsPartitioner.class);
我想保留超过 1 个减速器。但我只在一个减速器中获得了 o/p。此外,如果您看到分区程序代码,第一个 sysout(我已经评论过)给我 redCnt 为 1。我不确定当我从我的驱动程序类中将其计数设置为 3 时会发生什么。有人可以帮我解决这个问题吗?
仅供参考...我正在制作 jar 并在 HDFS 上运行它。