Как отловить ошибку Spark из сценария оболочки - PullRequest
2 голосов
/ 27 мая 2020

У меня есть конвейер в AWS Data Pipeline, который запускает сценарий оболочки с именем shell. sh:

$ spark-submit transform_json.py


Running command on cluster...
[54.144.10.162] Running command...
[52.206.87.30] Running command...
[54.144.10.162] Command complete.
[52.206.87.30] Command complete.
run_command finished in 0:00:06.

Консоль AWS Data Pipeline сообщает, что задание «ЗАВЕРШЕНО», но в журнале stderr я вижу, что задание было прервано:

Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 404, AWS Service: Amazon S3, AWS Request ID: xxxxx, AWS Error Code: null, AWS Error Message: Not Found...        
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 5.0 failed 1 times, most recent failure: Lost task 0.0 in stage 5.0 (TID 5, localhost, executor driver): org.apache.spark.SparkException: Task failed while writing rows.
    ...
        20/05/22 11:42:47 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
        20/05/22 11:42:47 INFO MemoryStore: MemoryStore cleared
        20/05/22 11:42:47 INFO BlockManager: BlockManager stopped
        20/05/22 11:42:47 INFO BlockManagerMaster: BlockManagerMaster stopped
        20/05/22 11:42:47 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
        20/05/22 11:42:47 INFO SparkContext: Successfully stopped SparkContext
        20/05/22 11:42:47 INFO ShutdownHookManager: Shutdown hook called

Я новичок в конвейере данных и Spark; не могу понять, что на самом деле происходит за кулисами. Как заставить сценарий оболочки перехватывать SparkException?

1 Ответ

5 голосов
/ 27 мая 2020

попробуйте, как этот пример ниже ...

ваш сценарий оболочки может перехватить код ошибки, подобный этому ... где ненулевой код выхода - ошибка

$? - статус выхода последняя выполненная команда; по соглашению 0 означает успех, а все остальное указывает на неудачу.


spark-submit transform_json.py


 ret_code=$?
   if [ $ret_code -ne 0 ]; then 
      exit $ret_code
   fi

Вы должны ввести код для возврата кода выхода с помощью sys.exit(-1) в состоянии ошибки. проверьте это для python обработки исключений ...

Проверьте это Коды выхода в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...