0

私は Java MapReduce プログラムに取り組んでおり、ソケットまたはその他の方法を使用してレデューサー間でデータを共有できるかどうか疑問に思っていました。ソケット経由の場合、特定のキーのリデューサーを操作しているマシンの IP アドレスとポート番号を取得する方法は?

前もって感謝します :)

4

1 に答える 1

0

独自のカスタム ソケットを介して通信できます。特定のキーのレデューサーを実行している特定のホストを見つけるには、JobClient API を使用して、実行中のジョブ レデューサー リストをジョブ トラッカーにクエリできます。

レデューサー ホストを見つけるには、ジョブ パーティショナー (ほとんどの場合ハッシュ) を介してキーを実行し、レデューサー タスク番号 (0 から num reducers-1) を特定してから、レデューサー タスクが実行されているマシンを見つけます (JOb トラッカーから取得)。 JobClient API 経由)。

ただし、考慮すべき点がいくつかあります。

  • すべてのレデューサーをすべて並行して実行できない場合 (レデューサー スロットよりも多くのレデューサー、または別のジョブを同時に実行している場合) はどうなりますか?
  • ジョブ トラッカーが 2 つ以上のレデューサーを同じタスク ノードで実行するようにスケジュールする場合、ポート番号をどのように割り当てて、両方が同じ番号でリッスンしようとしないようにしますか (たとえば、21000 などのベース ポート番号を選択する必要があると思います)。次に、各レデューサーは、その番号にレデューサー番号を加えた番号のポートをリッスンします)。そのポートがすでに別のプロセスで使用されている場合はどうなりますか?
于 2013-09-28T20:32:38.777 に答える