stdlog和err是每一个nodemanager上的每一个executor都会产生的,如果当程序完成后,在这个节点上,跟这个应用相关的所有信息全部会被清除掉,包括这些日志,这样的话如果我们不把这个日志收集起来,那么后面在通过spark historyServer 里面就看不到这些日志
为了能够看到这些日志,我们要做的事情是,让nodemanager开启一个日志聚合的功能,这个功能的作用是,当应用程序终止的时候,需要将这个应用程序产生的所有日志全部聚集到远程hdfs上的一个目录,聚集之后,还需要通过一个http的接口去查看这些日志,查看日志的这个角色就叫做mr的history server,通过她的web ui接口,当我们点击std日志的时候,就会跳转到mr job history server这个地址上19888上,然后去把这个日志展示出来
修改spark-defaults.conf
# 告诉 yarn 去哪里查看 spark 的history 地址
spark.yarn.historyServer.address master:19889
# spark job 执行日志
spark.history.fs.logDirectory hdfs://HACluster/spark-log
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=19889
-Dspark.history.retainedApplications=3
-Dspark.history.fs.logDirectory=hdfs://HACluster/spark-log"
修改 mapred-site.xml
set mapreduce.jobhistory.done-dir=/opt/logs/mr-job/done
set mapreduce.jobhistory.intermediate-done-dir=/opt/logs/mr-job/done/done_intermediate
执行以下命令
# 启动mr 的 history server 端口为 19889 (日志配置 HADOOP_MAPRED_LOG_DIR)
<HADOOP_HOME>/sbin/mr-jobhistory-daemon.sh start historyserver
# 启动spark history server
<SPARK_HOME>/sbin/start-history-server.sh