1

ホストが死んでいるためにレデューサーが動かなくなっていることに気づきました。ログには、多くの再試行メッセージが表示されています。ジョブトラッカーにデッドノードをあきらめて作業を再開するように指示することは可能ですか?323のマッパーと1つのレデューサーしかありませんでした。私はhadoop-1.0.3を使用しています。

2012-08-08 11:52:19,903 INFO org.apache.hadoop.mapred.ReduceTask: 192.168.1.23 Will be considered after: 65 seconds.
2012-08-08 11:53:19,905 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 Need another 63 map output(s) where 0 is already in progress
2012-08-08 11:53:19,905 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 Scheduled 0 outputs (1 slow hosts and0 dup hosts)
2012-08-08 11:53:19,905 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2012-08-08 11:53:19,905 INFO org.apache.hadoop.mapred.ReduceTask: 192.168.1.23 Will be considered after: 5 seconds.
2012-08-08 11:53:29,906 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 Scheduled 1 outputs (0 slow hosts and0 dup hosts)
2012-08-08 11:53:47,907 WARN org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 copy failed: attempt_201207191440_0203_m_000001_0 from 192.168.1.23
2012-08-08 11:53:47,907 WARN org.apache.hadoop.mapred.ReduceTask: java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
    at java.net.Socket.connect(Socket.java:546)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:173)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:409)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:240)
    at sun.net.www.http.HttpClient.New(HttpClient.java:321)
    at sun.net.www.http.HttpClient.New(HttpClient.java:338)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:935)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:876)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:801)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getInputStream(ReduceTask.java:1618)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.setupSecureConnection(ReduceTask.java:1575)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1483)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1394)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1326)

2012-08-08 11:53:47,907 INFO org.apache.hadoop.mapred.ReduceTask: Task attempt_201207191440_0203_r_000000_0: Failed fetch #18 from attempt_201207191440_0203_m_000001_0
2012-08-08 11:53:47,907 WARN org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 adding host 192.168.1.23 to penalty box, next contact in 1124 seconds
2012-08-08 11:53:47,907 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0: Got 1 map-outputs from previous failures
2012-08-08 11:54:22,909 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 Need another 63 map output(s) where 0 is already in progress
2012-08-08 11:54:22,909 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201207191440_0203_r_000000_0 Scheduled 0 outputs (1 slow hosts and0 dup hosts)
2012-08-08 11:54:22,909 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2012-08-08 11:54:22,909 INFO org.apache.hadoop.mapred.ReduceTask: 192.168.1.23 Will be considered after: 1089 seconds.

私はそれを放っておいて、それはしばらくの間再試行し、それから死んだホストをあきらめてマッパーを再実行して成功しました。これは、ホストでアドレス指定された2つのIPが原因であり、Hadoopで使用されていた1つのIPを意図的にオフにしました。

私の質問は、再試行せずにデッドホストを放棄するようにhadoopに指示する方法があるかどうかです。

4

1 に答える 1

3

ログから、マップタスクを実行したタスクトラッカーの1つに接続できないことがわかります。レデューサーが実行されているタスクトラッカーは、HTTPプロトコルを介してマップの中間結果を取得しようとしていますが、結果を持っているタスクトラッカーが停止しているため失敗します。

tasktrackerの失敗のデフォルトの動作は、次のようになります。

jobtrackerは、失敗したtasktrackerのローカルファイルシステムにある中間出力にreduceタスクにアクセスできない可能性があるため、失敗したtasktrackerで正常に実行および完了したマップタスクが不完全なジョブに属している場合に再実行するように調整します。進行中のタスクも再スケジュールされます。

問題は、タスク(マップまたはリデュース)が何度も(4回だと思いますが)失敗すると、スケジュールが変更されず、ジョブが失敗することです。あなたの場合、マップは正常に完了したように見えますが、レデューサーはマッパーに接続して中間結果を取得できません。4回試行し、その後ジョブは失敗します。

失敗したタスクは、ジョブの一部であり、ジョブに含まれるすべてのタスクが成功しない限り、ジョブ自体は成功しないため、完全に無視することはできません。

レデューサーがアクセスしようとしているリンクを見つけてブラウザーにコピーし、発生するエラーを確認してください。

Hadoopが使用するノードのリストからノードをブラックリストに登録して完全に除外することもできます。

  In conf/mapred-site.xml

  <property>
     <name>mapred.hosts.exclude</name>
     <value>/full/path/of/host/exclude/file</value>
  </property>

  To reconfigure nodes.

  /bin/hadoop mradmin -refreshNodes
于 2012-08-08T19:14:51.477 に答える