1

リデュース プロセッサが発生する場所がわからないシナリオがあります。

i) 入力テキスト ファイルがあり、1 ~ 4 のバランスの取れた範囲にある 1000 の整数が含まれています。

ii) 各ノードに 12 個のスロットを持つ 4 ノード クラスターがあり、そのうち 4 個がレデューサーとして割り当てられているとします。合計で 16 個のリデュース スロットが得られます。

iii) ドライバーにレデューサーの数を設定しました。

jobConf.setNumReduceTasks(4);

iii)そして最後に、次のパーティショナーメソッドがあるとします

public class MyPartitioner extends Partitioner<Text,Text>{
    @Override
    public int getPartition(Text key, Text value, int numPartitions) {
    return Integer.parseInt(key.toString());
    }       
}

1) 私。各ノードIEで複数のリデューサーを実行するのではなく、各ノードで1つのリデューサーを使用して(他の3つのローカルリデューサーをアイドル状態のままにして)reduceを処理するように強制するにはどうすればよいですかノード 2、3、4 のアイドル状態で 12 スロットがあります。

ii. Hadoop MR はリソースを管理して、「ノード X が最もアイドル状態です。そこでレデューサーを生成します...」

2) キーにスキューがあり、それをグループ化する場合、そのキーに対して複数のレデューサーを生成できますか。たとえば、ランダムな整数を値「4」のシード値に追加し、パーティショナーを使用して 3 つのレデューサーを追加して処理できますか?レデューサー 4、5、6、および 7 の値「4」?

jobConf.setNumReduceTasks(7);

public class MyPartitioner2 extends Partitioner<Text,Text>{
    @Override
    public int getPartition(Text key, Text value, int numPartitions) {
        int p = Integer.parseInt(key.toString());
        if (p == 4){return p + (new Random()).nextInt(4);}//extra 3 partitions...
        return p;
    }
}

それはスキューに効きますか?

4

1 に答える 1