本文将介绍spark on yarn模式下,怎样找到executor的日志。运行环境是基于HDP2.6.0.3-8版本。
引言
spark on yarn应用在运行时和完成后日志的存放位置是不同的,一般运行时是存放在各个运行节点,完成后会归集到hdfs。无论哪种情况,都可以通过spark的页面跳转找到executor的日志,但是在大多数的生产环境中,对端口的开放是有严格的限制,也就是说根本无法正常跳转到日志页面进行查看的,这种情况下,就需要通过后台查询。
运行时
spark on yarn模式下一个executor对应yarn的一个container,所以在executor的节点运行ps -ef|grep spark.yarn.app.container.log.dir
,如果这个节点上可能运行多个application,那么再通过application id进一步过滤。上面的命令会查到executor的进程信息,并且包含了日志路径,例如
-Djava.io.tmpdir=/data1/hadoop/yarn/local/usercache/ocdp/appcache/application_1521424748238_0051/container_e07_1521424748238_0051_01_000002/tmp '
-Dspark.history.ui.port=18080' '-Dspark.driver.port=59555'
-Dspark.yarn.app.container.log.dir=/data1/hadoop/yarn/log/application_1521424748238_0051/container_e07_1521424748238_0051_01_000002
也就是说这个executor的日志就在/data1/hadoop/yarn/log/application_1521424748238_0051/container_e07_1521424748238_0051_01_000002
目录里。至此,我们就找到了运行时的executor日志。
完成后
当这个application正常或者由于某种原因异常结束后,yarn默认会将所有日志归集到hdfs上,所以yarn也提供了一个查询已结束application日志的方法,即
yarn logs -applicationId application_1521424748238_0057
,结果里面会包含所有executor的日志,可能会比较多,建议将结果重定向到一个文件再详细查看。
总结
无论对于spark应用程序的开发者还是运维人员,日志对于排查问题是至关重要的,所以本文介绍了找到日志的方法。