My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
ProgrammingGuidePartitioner  
SSS Mapreduce Programming Guide - Partitioner
en , ja
Updated Feb 25, 2013 by tatsuhik...@gmail.com

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();
Powered by Google Project Hosting