hadoop分区器获取不正确的减少计数

时间:2013-08-25 05:30:20

标签: hadoop-partitioning

我今天正在分区工作。它是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上运行。

1 个答案:

答案 0 :(得分:0)

你的逻辑似乎是正确的!我想你需要创建一个jar文件并在终端中运行它以获得分区结果。

干杯!