0

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

4

1 回答 1

0

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

干杯!

于 2013-08-27T05:39:43.670 回答