为以纱线模式运行的每个火花作业配置log4j

时间:2019-07-05 10:50:01

标签: java scala apache-spark hadoop log4j

我正在用纱客户端模式运行spark作业。我正在unix脚本中使用spark-submit命令运行这些作业。我希望每个运行的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 |& 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服务器上。 请帮忙!!

1 个答案:

答案 0 :(得分:0)

提交火花申请后。它生成一个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}

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

yarn logs -applicationId <application ID> [OPTIONS]