Spark 查看某个正在执行的或已结束的任务中executor与driver日志(转载)

原文地址:https://blog.csdn.net/asd136912/article/details/97392033

  1. 在web界面上查看 任务正在运行

如果运行在 YARN 模式,可以在 ResourceManager 节点的 WEB UI 页面根据 任务状态、用户名 或者 applicationId Search 到应用。

点击表格中 Tracking UI 列的History 链接; 点击相关的 ApplicationId 链接,进入到详情页面点击上面的 Tracking URL: History 链接 就进入到Spark作业监控的 WEB UI 界面,这个页面就是对应 Spark 应用程序历史执行界面:

img

img

到这个界面之后,可以点击 Executors 菜单,这时可以进入到 Spark 程序的 Executors 界面,里面列出所有Executor信息,以表格的形式展示,在表格中有 Logs 这列,里面就是Spark应用程序运行的日志。

  1. 对应机器日志目录下面查看 任务正在运行

目录位置在Yarn配置里面的yarn.nodemanager.log-dirs中设置;

如设置的是/data1/hadoop/yarn/log:

img

  1. 通过 yarn logs -applicationId 命令查看 任务运行完成

最简单地收集日志的方式是使用 YARN 的日志收集工具(yarn logs -applicationId),这个工具可以收集你应用程序相关的运行日志;

需要开启日志聚合功能(yarn.log-aggregation-enable,在默认情况下,这个参数是 false),下面会详细讲到。

$ yarn logs -applicationId  application_1537448956025_2409589 | head
18/10/20 17:14:06 INFO client.ConfiguredRMFailoverProxyProvider: Failing over to rm130
Unable to get ApplicationState. Attempting to fetch logs directly from the filesystem.
Container: container_e93_1537448956025_2409589_01_000232 on bigdata-offline-hadoop0100.bjthq.arganzheng.lan_8041
============================================================================================================
LogType:container-localizer-syslog
Log Upload Time:Fri Oct 19 10:11:06 +0800 2018
LogLength:168
Log Contents:
2018-10-19 09:46:41,580 WARN [main] org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer: Localization running as nobody not xfhuang

YARN日志聚合 日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚集功能需要额外的配置。

这个日志存储的就是具体map和reduce的日志,包括框架的和应用程序里自己打印的。这个日志聚合是用来看日志的,而mapreduce job history server,则是用来看某个application的大致统计信息的,包括启停时间,map任务数,reduce任务数以及各种计数器的值等等。job history server是抽象概要性的统计信息,而聚合日志是该application所有任务节点的详细日志集合。

要实现日志聚集,需要在yarn-site.xml文件中配置如下几个参数:

yarn.log-aggregation-enable

参数解释:是否启用日志聚集功能。

默认值:false

yarn.log-aggregation.retain-seconds

参数解释:在HDFS上聚集的日志最多保存多长时间。

默认值:-1

yarn.log-aggregation.retain-check-interval-seconds

参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。

默认值:-1

yarn.nodemanager.remote-app-log-dir

参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。

默认值:/tmp/logs

总结与补充 Spark 程序的日志分为 driver 日志和 executor 日志

在 yarn-client 模式下,driver 日志即是 spark-submit(或 spark2-submit)运行时的打印日志,这个日志是我们排查问题首先要拿到的。在 yarn-cluster 模式下 driver 日志在某个 container 上。

Spark 程序的日志根据 spark 程序所在的阶段需要去不同的地方查看

比如程序正在运行时可以通过程序本身的 web UI 查看运行时的日志,程序结束后,web UI 就退出了,Spark 会将日志移动到 Spark History。Spark程序结束后,就无法从 web UI 查看日志了,因为此时 driver 已经退出,而日志被移动到 spark history server,而 history server 保留日志是有时间和数量限制的;如果中 history server 中找不到,则需要从 HDFS的 /tmp/logs 目录下载 或者通过 yarn logs -applicationId 命令查看。

Spark Client 和 Spark Cluster的区别:

理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念:Application Master。在YARN中,每个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别。

YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业。

YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开。

原文地址:https://www.cnblogs.com/java-meng/p/15189270.html