1

私のアプリケーションでは、キーに基づいてできるだけ多くのレデューサー ジョブを作成したいと考えています。現在、私の現在の実装では、すべてのキーと値を 1 つの (リデューサー) 出力ファイルに書き込みます。これを解決するために、1 つのパーティショナーを使用しましたが、クラスを呼び出すことができません。パーティショナーは、選択マップ タスクの後、選択削減タスクの前に呼び出す必要がありますが、呼び出されませんでした。パーティショナーのコードは次のとおりです。

public class MultiWayJoinPartitioner extends Partitioner<Text, Text> {
@Override
public int getPartition(Text key, Text value, int nbPartitions) {
return (key.getFirst().hashCode() & Integer.MAX_VALUE) % nbPartitions;
return 0;
}
}

このコードは、キーと値に基づいてファイルを分割するのに正しく、出力は自動的にレデューサーに転送されますか??

4

1 に答える 1

0

すべてのコードを表示するわけではありませんが、通常、マッパー、リデューサー、パーティショナーなどを構成し、実際にジョブを Hadoop に送信するクラス (「ジョブ」または「MR」クラスと呼ばれる) があります。このクラスには、多くのプロパティを持つジョブ構成オブジェクトがあり、そのうちの 1 つはレデューサーの数です。このプロパティを、hadoop 構成が処理できる任意の数に設定します。

指定された数のレデューサーでジョブが構成されると、その数がパーティションに渡されます (ちなみに、これは正しいようです)。パーティショナーは、キーと値のペアに対して適切なレデューサー/パーティションを返し始めます。これが、できるだけ多くのレデューサーを取得する方法です。

于 2012-09-03T14:12:48.060 に答える