Hadoop/Yarn的日志清理

Posted worldchinalee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop/Yarn的日志清理相关的知识,希望对你有一定的参考价值。

Hadoop/Yarn的日志清理可以分为两个子话题讨论:

Hadoop/Yarn的本地日志(非Yarn Container生成的日志)
Yarn的Container生成的日志
我们这里讨论的日志清理并不是通过定时的日志删除命令去实现,这一做法显然优雅, 具体的做法下面会分别进行讨论。

1. Hadoop/Yarn本地日志的清理
Hadoop/Yarn使用log4j进行日志输出,所以对于它们本地日志的清理,最好的方式是通过修改log4j的配置配置文件,以rolling的方式写入日志。Hadoop/Yarn的log4j配置文件一般会放置于/etc/hadoop或/etc/hadoop/conf下,确切的位置与你使用的Hadoop发行版有关,请自行查找并确认。

很多的Hadoop的发行版(例如EMR)对于Hadoop/Yarn的本地日志使用DailyRollingFileAppender,这意味着日志将永远不会被自动清理,如果担心日志文件过多挤占磁盘空间的话,可以考虑将DailyRollingFileAppender改为RollingFileAppender, 具体做法是:

针对集群所有节点上的log4j.properties文件做如下修改:

使用RollingFileAppender替换DailyRollingFileAppender
设定单个log文件的大小 (MaxFileSize)
设定最多log文件数(MaxBackupIndex)
通过这样的设置,当日志超过指定的og文件数后,会自动覆盖最早期的日志,不再需要手动删除日志。

覆盖之后,只有重启Hadoop相关服务配置才会生效,但是在重启前建议将现有日志备份到其他位置,备份好之后再删除现有日志:

sudo rm -rf /var/log/hadoop-hdfs/* /var/log/hadoop-mapreduce/* /var/log/hadoop-yarn/*
1
具体的日志位置可能会因不同的发行版而不同,但一版都会位于/var/log/下。同样的,该操作需要在集群所有节点上执行。

清空日志之后就可以重启Hadoop相关服务了,执行前请确保没有集群目前处于空闲状态,没有任务正在执行!

重启完成之后,执行一些作业,等待一段时间之后,可以进入各个节点的/var/log/hadoop-yarn和/var/log/hadoop-hdfs下查看一下日志文件体积和数量,确保修改已生效。

2. Yarn的Container日志
作为一种分布式系统,Yarn上应用会以容器(Container)形式运行,其在运行期间产生的日志也是先写在容器对应物理节点的某个本地目录下。由于日志是分布式存储的,所以不便查看,因此,默认情况下,Yarn都会开启日志聚合功能,将各节点的本地日志聚合之后,存放于HDFS上。控制这一功能的配置项是yarn.log-aggregation-enable,该项通常会被设为true,即启动日志聚合。

在开启了日志聚合的情况下,Yarn对日志的处理是这样的:容器内日志会先写入worker节点的本地目录下,当作业执行结束后,会将所有节点的日志聚合,存放于hdfs上的某个目录下,同时删除本地节点的日志文件。而hdfs上的目录也有一个保留时间,超过这个时间日志会被自动清除。

所以对于容器内产生的日志,默认是不需要关注日志越积累越多的问题。控制hdfs上聚合日志保存时长的配置项是yarn.log-aggregation.retain-seconds

最后,作为一个备忘,我们将日志聚合的几个参数汇总一下,它们都在yarn-site.xml中配置,需要注意的是,在不同的发行版中,它们的默认值都是不尽相同的:

yarn.log-aggregation-enable
参数解释:是否启用日志聚集功能,开源Hadoop版的默认值:false

yarn.log-aggregation.retain-seconds
参数解释:在HDFS上聚集的日志最多保存多长时间。开源Hadoop版的默认值:-1

yarn.log-aggregation.retain-check-interval-seconds
参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。开源Hadoop版的默认值:-1

yarn.nodemanager.remote-app-log-dir
参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。开源Hadoop版的默认值:/tmp/logs

yarn.nodemanager.log-dirs
参数解释:container日志本地写入的目录,可以为多个,用逗号分隔

总结一下:

1.container的日志首先会在本地服务器生成日志

2.在应用运行时,这个日志可以在本地查看或者通过ResourceManager页面直接查看

3.如果应用停止了并且开启聚合,那么本地的日志会被移动到hdfs目录上,只能通过hdfs目录查看
参数为yarn.nodemanager.remote-app-log-dir。
————————————————
版权声明:本文为CSDN博主「bluishglc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bluishglc/article/details/108724741

以上是关于Hadoop/Yarn的日志清理的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop开启Yarn的日志监控功能

SQLServer2008 清理日志文件

hadoop 3.x 配置日志功能

Hadoop - YARN NodeManager 剖析

Docker自动清理日志

Failed to start NodeManager caused by "/var/lib/hadoop-yarn/yarn-nm-recovery/yarn-nm-state/LOCK