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

2021-06-16 17:19:31 浏览数 (1)

文章目录

      • 1. 在web界面上查看
      • 2. 对应机器日志目录下面查看
      • 3. 通过 `yarn logs -applicationId` 命令查看
        • YARN日志聚合
      • 总结与补充

1. 在web界面上查看

任务正在运行

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

  • 点击表格中 Tracking UI 列的History 链接;
  • 点击相关的 ApplicationId 链接,进入到详情页面点击上面的 Tracking URL: History 链接

就进入到Spark作业监控的 WEB UI 界面,这个页面就是对应 Spark 应用程序历史执行界面:

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

2. 对应机器日志目录下面查看

任务正在运行

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

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

3. 通过 yarn logs -applicationId 命令查看

任务运行完成

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

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

代码语言:javascript复制
$ 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文件中配置如下几个参数:

  1. yarn.log-aggregation-enable 参数解释:是否启用日志聚集功能。 默认值:false
  2. yarn.log-aggregation.retain-seconds 参数解释:在HDFS上聚集的日志最多保存多长时间。 默认值:-1
  3. yarn.log-aggregation.retain-check-interval-seconds 参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。 默认值:-1
  4. yarn.nodemanager.remote-app-log-dir 参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。 默认值:/tmp/logs

总结与补充

  1. Spark 程序的日志分为 driver 日志和 executor 日志 在 yarn-client 模式下,driver 日志即是 spark-submit(或 spark2-submit)运行时的打印日志,这个日志是我们排查问题首先要拿到的。在 yarn-cluster 模式下 driver 日志在某个 container 上。
  2. 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 命令查看。
  3. 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不能离开。

0 人点赞