6

私はEMRストリーミングジョブ(Python)を持っていますが、これは通常は正常に機能します(たとえば、10台のマシンが200個の入力を処理します)。ただし、大規模なデータセット(12台のマシンが合計6000の入力を処理し、入力ごとに約20秒)に対して実行すると、2.5時間のクランチの後、次のエラーが発生します。

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 143
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:372)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:586)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:441)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:377)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

これを正しく読んでいると、誰かがSIGTERMシグナルをストリーミングジョブに送信したため、サブプロセスがコード143で失敗しました。

私の理解は正しいですか?その場合:EMRインフラストラクチャはいつSIGTERMを送信しますか?

4

2 に答える 2

10

私は何が起こっているのかを理解したので、他の誰かが同様の問題を経験した場合のいくつかの情報があります。

私にとっての鍵は、「jobtracker」ログを確認することでした。これらは、S3のタスクのlogs/フォルダーの下にあります。

<logs folder>/daemons/<id of node running jobtracker>/hadoop-hadoop-jobtracker-XXX.log.

次の種類の複数の行がありました:

2012-08-21 08:07:13,830 INFO org.apache.hadoop.mapred.TaskInProgress 
  (IPC Server handler 29 on 9001): Error from attempt_201208210612_0001_m_000015_0: 
  Task attempt_201208210612_0001_m_000015_0 failed to report status 
  for 601 seconds. Killing!

そのため、私のコードはタイムアウトになり、強制終了されていました(10分のタスクタイムアウトを超えていました)。10分間I/Oを実行していませんでしたが、これは確かに予期されていませんでした(通常、20秒ごとにI / Oを実行します)。

それから私はこの記事を発見しました:

http://devblog.factual.com/practical-hadoop-streaming-dealing-with-brittle-code

「私たちの科学プロジェクトの1つでは、ルビー上で実行され、ドキュメントの解析をlibxmlに依存するHadoopストリーミングジョブがいくつかあります。これにより、最悪の状況が発生します。Webは非常に悪いHTMLでいっぱいであり、libxmlは無限ループに陥ることがあります。または完全なsegfaults。一部のドキュメントでは、常にsegfaultsです。」

それはそれを釘付けにしました。私はこれらの「libxmlが無限ループに陥る」状況の1つを経験しているに違いありません(私はlibxmlを頻繁に使用しています-RubyではなくPythonでのみ使用しています)。

私にとっての最後のステップは、スキップモードをトリガーすることでした(ここでの手順:botoでhadoopパラメーターを設定しますか?)。

于 2012-08-22T11:21:26.687 に答える
1

Amazon EMRからのこの出力に遭遇しました(「サブプロセスがコード143で失敗しました」)。私のストリーミングジョブは、PHP curlを使用して、セキュリティグループにMapReduceジョブサーバーが含まれていないサーバーにデータを送信していました。したがって、レデューサーはタイムアウトして殺されていました。理想的には、同じセキュリティグループにジョブを追加したいのですが、APIの前にURLセキュリティトークンパラメータを追加することを選択しました。

于 2013-05-06T20:48:58.967 に答える