1

Hadoop は 8 ノードのクラスターで実行されています。送信されたジョブは、異なるキーを持つマッパー出力としていくつかのキー値オブジェクトを生成します (手動でチェック)。

ログ レポートのように、起動された reduce タスクの数が常に1である理由がわかりません。10個の異なるキーがあるため、少なくともノード数と同じ数の reducer、つまり 8 (これはスレーブの数)。

ジョブ終了時のログです

13/05/25 04:02:31 INFO mapred.JobClient: Job complete: job_201305242051_0051
13/05/25 04:02:31 INFO mapred.JobClient: Counters: 30
13/05/25 04:02:31 INFO mapred.JobClient:   Job Counters 
13/05/25 04:02:31 INFO mapred.JobClient:     Launched reduce tasks=1
13/05/25 04:02:31 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=21415994
13/05/25 04:02:31 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/25 04:02:31 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/05/25 04:02:31 INFO mapred.JobClient:     Rack-local map tasks=7
13/05/25 04:02:31 INFO mapred.JobClient:     Launched map tasks=33
13/05/25 04:02:31 INFO mapred.JobClient:     Data-local map tasks=26
13/05/25 04:02:31 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=5486645
13/05/25 04:02:31 INFO mapred.JobClient:   File Output Format Counters 
13/05/25 04:02:31 INFO mapred.JobClient:     Bytes Written=2798
13/05/25 04:02:31 INFO mapred.JobClient:   FileSystemCounters
13/05/25 04:02:31 INFO mapred.JobClient:     FILE_BYTES_READ=2299685944
13/05/25 04:02:31 INFO mapred.JobClient:     HDFS_BYTES_READ=2170126861
13/05/25 04:02:31 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=2879025663
13/05/25 04:02:31 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=2798
13/05/25 04:02:31 INFO mapred.JobClient:   File Input Format Counters 
13/05/25 04:02:31 INFO mapred.JobClient:     Bytes Read=2170123000

その他の (役立つ?) 情報:

  • ノードごとに、ジョブに1つのコアが割り当てられています
  • ジョブが 8 つのノードで効果的に実行されていることを手動で確認しました。
  • レデューサータスクを1つに固定するために私が設定したパラメーターはありません
  • Hadoop バージョン: 1.1.2

では、レデューサー番号が 1 である理由がわかりましたか? それ以上ではありませんか?

ありがとう

4

2 に答える 2

1

あなたがすべき:

  1. まず、クラスターが複数のレデューサーをサポートしているかどうかを確認します
  2. 実行したい削減メンバーを指定します

サポートされているレデューサー数をチェックアウトする

それをチェックアウトする最も便利な方法は、jobtrackerwebUI を使用することです: http://localhost:50030/machines.jsp?type=active(jobtracker が実行されているホスト名を削除する必要がある場合がありlocalhostます。クラスター内のすべてのアクティブな TaskTracker と、各 TaskTracker が同時に実行できるレデューサーの数が表示されます。

レジューサ番号を指定してください

次の 3 つの方法があります。

コードでレデューサー番号を指定します

zsxwing が示したように、 の callsetNumReduceTasks()メソッドでレデューサー番号を指定する必要がありますJobConf。そしてreduce数をパラメータとして与えます。

コマンドラインでレデューサー番号を指定します

次のように、コマンド ラインでレデューサー番号を渡すこともできます bin/hadoop jar hadoop-examples-1.0.4.jar terasort -Dmapred.reduce.tasks=2 teragen teragen_out

上記のコマンド ラインは、2 つのレデューサーを開始します。

レデューサー番号を指定しますconf/mapred-site.xml

次のように、mapred-site.xml に新しいプロパティを追加することもできます。

  <property>
    <name>mapred.reduce.tasks</name>
    <value>2</value>
  </property>
于 2013-06-04T09:37:39.517 に答える