私の質問は、マッパーでマルチプロセッシングを自分で処理する必要があるか (標準入力からタスクを読み取り、ワーカー プロセスに分散し、結果をマスター プロセスに結合して標準出力に出力する)、Hadoop が自動的に処理するかどうかです。
Hadoop ストリーミングのドキュメントにも、Amazon Elastic MapReduce FAQ にも答えが見つかりませんでした。
私の質問は、マッパーでマルチプロセッシングを自分で処理する必要があるか (標準入力からタスクを読み取り、ワーカー プロセスに分散し、結果をマスター プロセスに結合して標準出力に出力する)、Hadoop が自動的に処理するかどうかです。
Hadoop ストリーミングのドキュメントにも、Amazon Elastic MapReduce FAQ にも答えが見つかりませんでした。
インスタンスタイプごとのmap/reduceタスクの数については、EMRdoco[1]を参照してください。
Davidの回答に加えて、設定することで、Hadoopにマップスロットごとに複数のスレッドを実行させることもできます...
conf.setMapRunnerClass(MultithreadedMapRunner.class);
デフォルトは10スレッドですが、次のように調整できます。
-D mapred.map.multithreadedrunner.threads=5
私はこれがカスタムの高IOのものに役立つと思うことがよくあります。
Hadoop には「スロット」という概念があります。スロットは、マッパー プロセスが実行される場所です。tasktracker ノードごとにスロット数を構成します。これは、ノードごとに並列に実行されるマップ プロセスの理論上の最大値です。入力データの個別の分割 (FileSplits と呼ばれる) が十分にない場合は、これより少なくなる可能性があります。
Elastic MapReduce には、インスタンスの機能に応じて、割り当てるスロットの数を独自に見積もっています。
同時に、1 つのデータストリームが多くのコアによって処理されると、処理がより効率的になるシナリオを想像できます。マルチコアの使用が組み込まれたマッパーがある場合は、スロットの数を減らすことができます。しかし、典型的な Hadoop タスクでは、通常はそうではありません。
私の質問は次のとおりです。自分のマッパーでマルチプロセッシングを自分で気にする必要がありますか (標準入力からタスクを読み取り、ワーカー プロセスに分散し、結果をマスター プロセスに結合して標準出力に出力します)、Hadoop が自動的に処理しますか?
Hadoop クラスターが設定されると、ジョブを送信するために必要な最小要件は次のとおりです。
Hadoop はジョブをさまざまなノードに分散し、それらを監視し、i/p からデータを読み取り、o/p にデータを書き込みます。ユーザーがこれらすべてのタスクを実行する必要がある場合、Hadoop を使用する意味はありません。
Hadoop のドキュメントといくつかのチュートリアルを参照することをお勧めします。