我今天正在分区工作。它是hadoop自定义分区器的基本程序。下面是我的分区程序代码段。
public class 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上运行。
答案 0 :(得分:0)
你的逻辑似乎是正确的!我想你需要创建一个jar文件并在终端中运行它以获得分区结果。
干杯!