Spark を使用して ETL を実行すると、「メモリを割り当てることができませんでした」というエラーが時々表示されます。
ここでの問題は、失敗した場合でも終了コード 0 を返すことです。
私は Airflow BashOperator を使用しており、bash 終了コードを成功パラメーターとして使用しています。上記のエラーでジョブが誤って成功します。
エラーログは以下のようになります。
[2016-06-22 10:00:54,494] {models.py:974} INFO - Executing <Task(SparkSubmitPythonOperator): ingest_track> on 2016-02-12 01:00:00
[2016-06-22 10:00:54,548] {bash_operator.py:52} INFO - tmp dir root location:
/tmp
[2016-06-22 10:00:54,548] {bash_operator.py:61} INFO - Temporary script location :/tmp/airflowtmp7gl4hl//tmp/airflowtmp7gl4hl/ingest_track0lEaKC
[2016-06-22 10:00:54,548] {bash_operator.py:62} INFO - Running command: spark-submit.sh --master yarn-cluster --packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.1 --num-executors 1 ingest_script.py --dt "2016-02-12 01:00:00" --env prod --task_id ingest_track
[2016-06-22 10:00:54,556] {bash_operator.py:70} INFO - Output:
[2016-06-22 10:00:55,200] {bash_operator.py:74} INFO - Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000771b00000, 82313216, 0) failed; error='Cannot allocate memory' (errno=12)
[2016-06-22 10:00:55,226] {bash_operator.py:77} INFO - Command exited with return code 0
私の質問は、送信プロセス自体が失敗したときに終了コードが 0 になるのはなぜですか? それを正しくする方法は?
ありがとう!