首页 > 解决方案 > 为在 yarn 模式下运行的每个 spark 作业配置 log4j

问题描述

我在纱线客户端模式下运行火花作业。我在 unix 脚本中使用 spark-submit 命令运行这些作业。我想为每个运行的火花作业记录日志。我尝试使用以下命令获取日志:

spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 2G --driver-memory 2G --jars $spark_jars --class $spark_class  $main_jar |& tee -a ${log_file}

但是这里如果 spark 作业失败,它不会被命令状态检查捕获,可能是 unix 检查 |$tee 命令的状态,无论 spark 作业成功还是失败,它总是成功

if [ $? -eq 0 ]; then
    echo "===========SPARK JOB COMPLETED==================" |& tee -a ${log_file}
else
    echo "===========SPARK JOB FAILED=====================" |& tee -a ${log_file}
fi

我尝试使用 log4j 但无法成功。我希望将每个 spark 作业日志文件存储在本地 unix 服务器上。请帮忙 !!

标签: javascalaapache-sparkhadooplog4j

解决方案


提交 Spark 应用程序后。它生成一个application_id. 由于此应用程序在分布式集群中运行,因此您无法通过重定向获取 spark 应用程序的日志。

但是,当您执行以下操作时,它只会将控制台登录重定向到文件中。

spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 2G --driver-memory 2G --jars $spark_jars --class $spark_class  $main_jar > ${log_file}

例如,要获取提交到 yarn 集群的 spark 应用程序的日志记录,您需要使用 yarn logs 命令:

yarn logs -applicationId <application ID> [OPTIONS]


推荐阅读