文章目录
- 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),下面会详细讲到。
$ 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不能离开。