12
[hadoop-1.0.2] → hadoop jar hadoop-examples-1.0.2.jar wordcount /user/abhinav/input     /user/abhinav/output
Warning: $HADOOP_HOME is deprecated.

****hdfs://localhost:54310/user/abhinav/input
12/04/15 15:52:31 INFO input.FileInputFormat: Total input paths to process : 1
12/04/15 15:52:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for     your platform... using builtin-java classes where applicable
12/04/15 15:52:31 WARN snappy.LoadSnappy: Snappy native library not loaded
12/04/15 15:52:31 INFO mapred.JobClient: Running job: job_201204151241_0010
12/04/15 15:52:32 INFO mapred.JobClient:  map 0% reduce 0%
12/04/15 15:52:46 INFO mapred.JobClient:  map 100% reduce 0%

このガイド (http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#run-the-mapreduce) を使用して、単一ノードに Hadoop をセットアップしました。 -job) 提供された例を実行しようとしていますが、map 100% reduce 0% でスタックしています。何が原因でしょうか?

4

9 に答える 9

14

まず、ジョブトラッカーを開いて、空きレデューサースロットと他の実行中のジョブの数を確認します。実行中の別のジョブがあり、使用可能になったときにすべての空きレデューサースロットを消費しています。

ジョブのレデューサーを実行するために使用できる無料のレデューサースロットがあることを確認したら、ジョブトラッカーのWeb UIでジョブを見つけ、クリックして開きます。これで、完了したマッパーの数を確認できるはずです。これにより、実行中のマッパーがないことを確認してください。コンソールの%completeが嘘をつくことがあり、100%であるとコミットしている途中のマッパーがありますが、ファイナライズに問題があります。

すべてのマッパーが終了したことを確認したら、実行中のレデューサーの数を確認します。これは0を示していますか?一部が実行中であることが表示されない場合は、実行中のレデューサーの数をクリックして実行中のレデューサーページを表示し、レデューサーのログを表示するオプションが表示されるまでインスタンスをクリックします。このレデューサーのすべてのログを表示する必要があります(最初/最後の100kではありません)。これにより、レデューサーが実際に何を行っているかがわかります。おそらく、結果をマッパーからレデューサーノードにコピーしようとしています。これがネットワークまたはディスクスペースの問題であると思いますが、いずれにせよ、hadoopは最終的にレデューサーインスタンスを失敗させ、別のノードで実行するように再スケジュールする必要があります。

于 2012-04-15T23:24:49.707 に答える
4

Suse 11 を実行しているホストでもこの問題に遭遇しました。Chris が上記で指摘したように、問題はマッパーにあります。この問題を解決するために、/etc/hosts ファイルを編集し、ホストの IP アドレスを削除しました。たとえば、/etc/hosts

Ip.address.of.your.host      hostname

への変更

127.0.0.1                    hostname

上記の変更を行って再起動すると、wordcount プログラムを実行できました。

于 2012-09-10T12:23:13.180 に答える
4

この問題には多くの理由が考えられますが、最も可能性が高いのは、マッパーにバグがあることです (例外、無限ループなど)。

デバッグするには:

  • localhost:50030 にログオンすると、ジョブのリストが表示されます。失敗したジョブ (ID は job_201204151241_0010) を見つけ、トレースを確認します ([すべて] をクリックすることを忘れないでください。そうしないと、完全なログが表示されません)。
  • ログディスクを見てください。ログディスクは /usr/lib/hadoop/logs または同様のものの下にあるはずです (確認するには構成を参照する必要があります)。エラーメッセージを grep してcat /path/to/logs/*.log | grep ERROR、これが何かを返すかどうかを確認します。

何も出てこない場合は、マッパーにログメッセージを入れて、何が起こるかを各ステップで手動でデバッグすることをお勧めします (これが疑似分散モードで実行されると仮定します)。

それがどうなるか教えてください。

編集:クリスが指摘したように、リデューサーは0%であるため、実際にはリデュースステップの前に問題があります。

于 2012-04-15T22:05:18.387 に答える
2

Mac10.7.4で疑似クラスターを実行すると同じ問題が発生します。スリープモードから復帰したときに発生します。マッパーのIPアドレスがウェイクアップ時に再定義されたようです。

syslog:2012-09-14 16:52:06,542 WARN org.apache.hadoop.mapred.ReduceTask: attempt_201209141640_0003_r_000000_0 copy failed: attempt_201209141640_0003_m_000000_0 from 172.19.131.144
syslog:2012-09-14 16:52:06,546 INFO org.apache.hadoop.mapred.ReduceTask: Task attempt_201209141640_0003_r_000000_0: Failed fetch #1 from attempt_201209141640_0003_m_000000_0

したがって、スリープモードからウェイクアップした後、stop-all.shおよびstart-all.shを介してhadoopを再起動すると、この問題が修正されます。

于 2012-09-15T00:15:58.313 に答える
1

「map 100% reduce 0%」の問題の別の理由を見つけたかもしれません。

私の map タスクは大量のレコードを生成し、擬似クラスター化された環境で Hadoop を実行しています。

マップ タスク ログを調べたところ、マップ 100% から削減の開始までの時間が、中間セグメントのマージに費やされているようです。

2013-07-27 03:09:55,302 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 334
2013-07-27 03:10:15,166 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 325
2013-07-27 03:10:35,603 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 316
...
2013-07-27 03:26:18,738 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 28
2013-07-27 03:29:50,458 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 19
2013-07-27 03:33:48,368 INFO org.apache.hadoop.mapred.Merger: Down to the last merge-pass, with 10 segments left of total size: 4424592099 bytes

この手順は、セグメントのサイズと数、およびディスクの読み取り/書き込み速度によっては、かなりの時間がかかる場合があります。

ログは別として、マシンのディスク使用量をチェックすることで、これが発生していることを知ることができます。これは、大量のデータが新しいファイルにマージされているため、常に高くなります。ディスク使用量は変動し、マージ中に増加し、削除中に減少するため、マージ後にセグメントが削除されていることに気付くことさえあります。

于 2013-07-27T17:29:36.910 に答える
1

私もこの問題に遭遇しました。しかし、私はファイル etc/hosts を次のように編集します:

Ip.address.of.your.host      hostname   

次のように、上記の行の下に1行追加するだけです

127.0.1.1     hostname

127.0.1.1 (127.0.0.1 ではなく) であることに気付くはずです。そうしないと、「ホスト some_hostname ポート 22 に接続: 接続がタイムアウトしました」のような問題が発生します。

于 2013-12-28T13:30:49.990 に答える
1

Linux を使用していて、単一ノードの Hadoopを使用している場合: ディレクトリ /etc/hosts に移動し、この形式で IP アドレスを変更します

your-ip-address マスター your-ip-address スレーブ

/hadoop/conf ディレクトリに移動します masters を開き、これに localhost と入力します (他のすべてのアドレスを削除します!) スレーブを開き、これに localhost を設定します (他のすべてのアドレスを削除します!)

ここで、プログラムを再度実行すると、正しく動作するはずです。

于 2014-04-22T16:49:24.647 に答える