一、聚合日志介绍

日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container 任务日志存在在各个NodeManager上,保存在"yarn.nodemanager.log-dirs"配置的目录下,保存的时间由"yarn.nodemanager.log.retain-seconds"参数决定(默认时3小时)。启用日志聚集功能,会将完成的日志上传到HDFS的 "${yarn.nodemanager.remote-app-log-dir}/${user}/${yarn.nodemanager.remote-app-log-dir-suffix}"下,要实现日志聚合功能,需要额外的配置。

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

二、Yarn作业日志生命周期

Yarn作业在运行过程中,聚合日志的生命周期如下:

1. MR运行过程中,日志将暂存于yarn.nodemanager.log-dirs配置项指定的本地路径下,默认为/var/log/hadoop-yarn/container。

2. MR运行结束后(无论正常结束与否),将持久化日志到yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix配置项指定的HDFS路径下,前者默认为/tmp/logs,后者默认为logs。HDFS的实际路径为${yarn.nodemanager.remote-app-log-dir}/${user}/${yarn.nodemanager.remote-app-log-dir-suffix}/${application_id}。

3. 日志持久化后,会删除本地的暂存日志。

4. HDFS聚合日志保存周期 yarn.log-aggregation.retain-seconds,集群参数设置保留时间。

 

三、聚合日志相关参数

 
yarn.nodemanager.log-dirs
参数解释:日志存放地址(可配置多个目录)。
默认值:${yarn.log.dir}/userlogs

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

yarn.nodemanager.remote-app-log-dir-suffix
参数解释:远程日志目录子目录名称(启用日志聚集功能时有效)。
默认值:logs 日志将被转移到目录${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}下

yarn.nodemanager.log.retain-seconds
参数解释:NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。
默认值:10800(3小时)