|
ProgrammingGuidePartitioner
SSS Mapreduce Programming Guide - Partitioner
en , ja Partitioner「Partitioner」とはキーをハッシングして書き込み先のノードを決定するためのクラスです。 デフォルトではHashPartitionerを使ってハッシュ値を計算しています。 しかし、データセットによってはHashPartitionerでは各ノードに均等にTupleが分散しないこともあります。 その場合は、各ノードに均等にTupleを分散させるためにはユーザ定義のパーティショナーを利用する必要があります。 Partitionerのインターフェイスは以下のとおりです。 public interface Partitioner {
int getPartition(Packable key, Packable value, int numPartitions);
}Partitioner#getPartitionメソッドにてkeyから整数値を生成します。 この整数値は同じkeyからは同じものが生成される必要があります。 SSS Mapreduceはこの整数値を使ってTupleを各ストレージノードに分散させます。 Partitionerの指定はDataPutterの書き込み先の場合はDataPutter.createの引数に、Jobの出力先の場合はJob.Builder#addOutputメソッド引数に対してJob.partitionerメソッドでラップしてクラスオブジェクトを渡します。 DataPutter<PackableString, PackableInt> putter = DataPutter.create(PackableString.class, PackableInt.class, MyPartitioner.class); JobEngine engine = new JobEngine(client);
try {
engine.getJobBuilder("MyReducer", MyReducer.class)
.addInput(input)
.addOutput(output, Job.partitioner(MyPartitioner.class)).build();
| |