5

「マップのみ」(削減フェーズなし)プログラムがあります。入力ファイルのサイズは7つのマップタスクを作成するのに十分な大きさであり、生成された出力(part-000からpart006)を確認することで確認しました。現在、私のクラスターには8つのノードがあり、それぞれに8つのコアと8 GBのメモリがあり、共有ファイルシステムがヘッドノードでホストされています。

私の質問は、7つのマップタスクすべてを1つのノードでのみ実行するか、7つの異なるスレーブノードで7つのマップタスクを実行するか(ノードごとに1つのタスク)を選択できるかどうかです。そうすることができれば、コードと構成ファイルにどのような変更を加える必要があります。

コードでのみパラメータ「mapred.tasktracker.map.tasks.maximum」を1と7に設定しようとしましたが、感知できるほどの時間差は見つかりませんでした。私の設定ファイルでは、1に設定されています。

4

3 に答える 3

4

"mapred.tasktracker.map.tasks.maximum"各マップタスクに使用されるノードの数ではなく、各ノードで起動する必要があるマップタスクの数を扱います。Hadoopアーキテクチャでは、ノード(スレーブ)ごとに1つのタスクトラッカーがあり、マスターノード(マスター)に1つのジョブトラッカーがあります。したがって、プロパティを設定するmapred.tasktracker.map.tasks.maximumと、ノードごとに実行されるマップタスクの数のみが変更されます。の範囲"mapred.tasktracker.map.tasks.maximum"1/2*cores/nodeから2*cores/node

全体的に必要なマップタスクの数は、を使用して設定する必要がありますsetNumMapTasks(int)

于 2012-04-29T16:10:38.263 に答える
1

可能であれば、7 つのマップ タスクを 7 つの異なるノードで実行する必要があります。MapReduce の全体的な利点は、各タスクが可能な限り効率的に実行されるようにコンピューティングを並列化できることです。1 つのノードで 7 つのマップ タスクを実行した場合、各タスクはその 1 つのノードで同じリソース (RAM、CPU、IO) を求めて競合します。

の標準設定mapred.tasktracker.map.tasks.maximumはコアごとに 1 つなので、設定を 8 に変更できます。

さらに、マップのみのジョブがある場合は、マッパーの数を特定の数に設定する正当な理由が必要になります。マップ タスクの数を設定することは、実行するマップの数に関するジョブトラッカーへの「ヒント」にすぎませんが、これは最終的に、DFS が入力データを格納する方法に基づいてジョブトラッカーによって決定されます。この wiki に詳細があります。

ただし、場合によっては、reduce タスクの数を制御する必要があります。たとえば、並べ替えられた数値のリストが必要な場合は、すべてのデータが単一のレデューサーを通過するようにする必要があります。

于 2012-04-29T19:10:01.927 に答える
1

現在、クラスターには 8 つのノードがあり、それぞれに 8 つのコアと 8 GB のメモリがあり、ヘッド ノードでホストされている共有ファイル システムがあります。

ヘッド ノードでホストされている共有ファイル システムとは、データが HDFS でホストされていることを意味しますか?それとも、各ノードにマウントされたファイル システムのような NFS でホストされていることを意味しますか? HDFS を意味していると思いますが、NFS などを使用している場合は、HDFS でより高いスループットが期待できるはずです (データを処理マシンに移動するのではなく、処理コードをデータに移動する必要があります)。 )

入力ファイルの大きさ、分割サイズ、ファイル形式 (テキスト、シーケンスなど)、複製係数、圧縮方法は?

上記の質問に対する回答によっては、8x8 のセットアップで、マップの分割サイズを減らしてレプリケーション ファクターを上げれば、スループットが向上する可能性があります。

于 2012-04-29T18:51:43.227 に答える