Yarn运行日志管理


发布于 2017-05-14 / 56 阅读 / 0 评论 /
Yarn运行日志管理主要是NodeManager中Executor任务执行日志的管理。

NodeManager的运行日志保存在${yarn.nodemanager.log-dirs}/${appid}/${containerid}目录下。

1.运行日志类型

每个container会输出三种类型的日志:

(1)stdout:使用标准输出函数打印的日志,如scala的print输出的内容。

(2)stderr:标准错误产生的日志信息。

(3)syslog:使用log4j打印的日志信息,这是最常用的打印日志的方式,默认情况下,yarn会采用这种方式打印日志

2.日志清理机制

日志的清理机制分为以下两种:定期清理(由NonAggregatingLogHandler实现)、日志转存(由LogAggregationService实现)。默认使用定期清理机制。

2.1.定期清理

日志保留一定时间后被删除,保留时间由参数yarn.nodemanager.log.retain-seconds决定,默认为10800秒,即3小时。

2.2.日志转存

日志聚集转存由yarn.log-aggregation-enable参数决定,默认为false,即不开启日志转存。该机制将HDFS作为日志聚集仓库,会将应用程序产生的日志上传到HDFS。

该机制又分为以下两个阶段:

2.2.1.文件上传

这是第一个阶段。当一个应用程序结束时,它产生的所有日志将统一上传到${yarn.nodemanager.remote-app-log-dir}/${user}/${suffix}/${appid}目录下。

  • ${user}是应用程序的启动者;

  • ${yarn.nodemanager.remote-app-log-dir}默认为应用日志的远程hdfs目录,默认为/tmp/logs;

  • ${suffix}由参数yarn.nodemanager.remote-app-log-dir-suffix指定,默认是logs。

一旦日志全部上传到hdfs中,本地磁盘上的日志文件将会被删除。为了减少不必要的日志上传,NodeManager允许用户指定要上传的日志类型,默认上传所有。支持的类型有三种:

(1)ALL_CONTAINERS(上传所有Container日志);

(2)APPLICATION_MASTER_ONLY(仅上传ApplicationMaster产生的日志);

(3)AM_AND_FAILED_CONTAINERS_ONLY(上传ApplicationMaster跟运行失败的Container产生的日志)。

2.2.2.文件生命周期管理

这是第二个阶段。转存到hdfs的日志,生命周期不再由NodeManager负责,而是由JobHistory服务负责管理。

每个日志文件最大存留时间为yarn.log-aggregation.retain-seconds,默认为10800秒,即3小时。