今日はパーティショナーに取り組んでいます。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で実行しています。