1

Hadoop と mapreduce パーティショナーは初めてです。独自のパーティショナーを作成したいのですが、パーティショナーでファイルを読み取る必要があります。私は何度も検索しましたが、分散キャッシュを使用する必要があることがわかりました。Hadoop パーティショナーで分散キャッシュを使用するにはどうすればよいですか? パーティショナーには何を書くべきですか?

public static class CaderPartitioner extends Partitioner<Text,IntWritable> {

    @Override
    public int getPartition(Text key, IntWritable value, int numReduceTasks) {
        return 0; 
    }
}

ありがとう

4

1 に答える 1

1

これを解決する最も簡単な方法は、hadoop に含まれるパーティショナーの例を見ることです。この場合、注目すべきは、TotalOrderPartitioner直接キーを支援するために事前に生成されたファイルを読み込む です。

ソースコードはこちらで見つけることができ、使用方法を示す要点は次のとおりです。

最初に、mapreduce ジョブ ドライバー (HDFS 上) でファイルが見つかる場所をパーティショナーに伝える必要があります。

// Define partition file path.
Path partitionPath = new Path(outputDir + "-part.lst");
// Use Total Order Partitioner.
job.setPartitionerClass(TotalOrderPartitioner.class);
// Generate partition file from map-only job's output.
TotalOrderPartitioner.setPartitionFile(job.getConfiguration(), partitionPath);

HDFS 上のファイルへのパスを取得できるように、構成にアクセスできることTotalOrderPartitionerがわかります。implements Configurable

ファイルはpublic void setConf(Configuration conf)、Partitioner オブジェクトの作成時に呼び出されるメソッドで読み取られます。この時点で、ファイルを読み取って、必要な設定を行うことができます。

このパーティショナーの多くのコードを再利用できると思います。

于 2016-09-20T09:18:28.920 に答える