MultithreadedMapper はいつ使用する必要がありますか?
アプリケーションが純粋な計算である場合に MultithreadedMapper を使用すると、仕事が速くなりますか? (レイテンシ型マッパーなし)
MultithreadedMapper はいつ使用する必要がありますか?
アプリケーションが純粋な計算である場合に MultithreadedMapper を使用すると、仕事が速くなりますか? (レイテンシ型マッパーなし)
それは依存しますが、最初の解決策として MultithreadedMapper を使用しないでください。
そのため、単一のスレッド化されたマッパーを使用して、より多くのマッパーを同時に起動し、複数の入力で動作できるようにスケーリングすることをお勧めします。コアが多いほど、mapred.tasktracker.map.tasks.maximum の値を高く設定できます。もちろん、これにはより強力なマシンが必要です。
私の理解では、MultithreadedMapper は、ローカル I/O よりも待ち時間が長い Web からページをフェッチするような I/O バウンドの場合に便利です。このような場合、MultithreadedMapper を使用すると、単一のネットワーク I/O 呼び出しでブロックされず、データが利用可能になったときに処理を続行できるため、役立ちます。
ただし、処理する HDFS に大きなデータがある場合は、データがローカライズされているため、簡単に取得できます。計算が CPU バウンドの場合は、マルチコア、マルチプロセス ソリューションの方が便利です。
また、マッパーがスレッドセーフであることを確認する必要があります。
マッパーで複数のスレッドを使用する場合と使用しない場合については、この記事1と2を確認してください。MultithreadedMapper を使用するよりも、各ノードのマップ スロットの数を増やすことをお勧めします。