0

今日はパーティショナーに取り組んでいます。Hadoop カスタム パーティショナーの基本プログラムです。以下は、私のパーティショナー コード スニペットです。

public class VowelConsPartitioner extends 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 に答える