日志不聚合

客户端向YARN提交MapReduce作业运行时,会建立Container运行日志,并保存在本地磁盘(不是 HDFS 中),默认情况下,日志目录为 logs/userlogs/ 。此目录下的内容为各个作业运行时在本节点上所建立的log目录结构,此层由 “application ” 加 “id” 组成文件夹名,进入此文件夹后,在此层看到的是由 “conainer” 加 “id” 组成的文件夹,进入此文件夹后,在此层有三个文件:stderr(异常输出),stdout(标准输出),syslog(运行日志)。日志会输出地址到 Appmaster 运行的节点上。

日志聚合

日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。通过参数yarn.log-aggregation-enable来开启,这个参数默认是false。如果开启了,你可以在yarn模式下在命令行中使用yarn logs -applicationId 来查看你的应用程序的运行日志。另外,如果开启了日志聚合,本地的日志文件就会删除,从而腾出更多空间。

日志聚合参数配置

yarn.log-aggregation-enable
参数说明:是否启用日志聚合功能,日志聚合开启后保存到HDFS上。默认值:false

yarn.log-aggregation.retain-seconds
参数说明:聚合后的日志在HDFS上保存多长时间,单位为s。默认值:-1(不启用日志聚合),例如设置为86400,24小时

yarn.log-aggregation.retain-check-interval-seconds
参数说明:删除任务在HDFS上执行的间隔,执行时候将满足条件的日志删除(超过参数2设置的时间的日志),如果是0或者负数,则为参数2设置值的1/10,上例值在此处为8640s。默认值:-1

yarn.nodemanager.log.retain-seconds
参数说明:当不启用日志聚合此参数生效,日志文件保存在本地的时间,单位为s。默认值:10800

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 logs -applicationId <applicationId> -containerId <containerId> -nodeAddress <nodeAddress>