我想解决 Amazon EMR 上 Apache Spark 应用程序中的阶段故障。
简短描述
当 Spark 任务出现问题时,您可能会遇到阶段故障。阶段故障是由硬件问题、不正确的 Spark 配置或代码问题引起的。当出现阶段故障时,Spark 驱动程序日志会报告类似于以下内容的异常:
"org.apache.spark.SparkException: Job aborted due to stage failure: Task XXX in stage YYY failed 4 times, most recent failure: Lost task XXX in stage YYY (TID ZZZ, ip-xxx-xx-x-xxx.compute.internal, executor NNN): ExecutorLostFailure (executor NNN exited caused by one of the running tasks) Reason: (example-reason)"
解决方法
确定您使用 --deploy-mode 客户端提交的 Spark 作业的原因代码
原因代码位于终端中显示的异常中。
如果您从 Amazon EMR Steps 提交作业,则原因代码位于 Amazon EMR 控制台的 stderr 文件中。您还可以从您为集群日志记录指定的 Amazon Simple Storage Service (Amazon S3) 位置获取步骤 stderr 日志。例如,您可以使用 s3://example-log-bucket/example-cluster-id/steps/example-step-id/ 文件路径来查找日志。
要识别 YARN 应用程序日志中的阶段故障,请在主节点上运行以下命令:
yarn logs -applicationId example-application-id | grep "Job aborted due to stage failure" -A 10
**注意:**请将 example-application-id 替换为您的 Spark 应用程序 ID。
您可以从为集群日志记录指定的 Amazon S3 位置获取 YARN 应用程序。例如,您可以使用 s3//example-log-bucket/example-cluster-id/containers/example-application-id/ 文件路径。您还可以从应用程序主容器中的 YARN ResourceManager 获取 YARN 应用程序日志。
解决根本原因
确定异常后,使用以下 AWS Knowledge Center 文章之一来解决问题: