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小时。