通常は正常に動作するEMRストリーミングジョブ(Python)があります(たとえば、10台のマシンで200個の入力を処理するなど)。私が読んでいた場合Amazon Elastic MapReduce - SIGTERM
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)
:しかし、私は大規模なデータセットに対してそれを実行します(入力あたり約20秒で6000個の入力の合計を処理する12機、)、クランチの2.5時間後、私は次のエラーを取得しますこれは正しく、誰かがストリーミングジョブにSIGTERMシグナルを送信したため、サブプロセスはコード143で失敗しました。
私の理解は正しいですか?もしそうなら、いつEMRインフラストラクチャーがSIGTERMを送るのですか?
CloudWatchのメトリックをチェックして、ある種のIO制限が発生しているかどうかを確認しましたか?私の経験から、IO制限を打つと、奇妙なことが起こり始める。あなたのデータノードにどのインスタンスタイプを使用しているのかわかりませんが、より大きなジョブを実行するとIOパフォーマンスが向上するものにアップグレードすることをお勧めします。 – Edenbauer
問題は、各タスクがCPUバインドされ、まれで散発的なI/Oがあることです。それは、S3からファイルをロードしてから約20秒間、CPUの処理が大量になります。 5秒ごとに別の(中間の)ファイルがS3に保存されます。それはいくつかの外部ライブラリ(lxml、scikit-learn)を使用していて、おそらくそのうちの1つが(メモリ消費の急増によって)私に失敗していると思っていました、そしてEMRインフラストラクチャがSIGTERMを送信していました。それを確認するために、私はEMRがプロセスを提案するケース/シナリオを理解しようとしています。 – slavi