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文件数后,会自动覆盖最早期的日志,不再需要手动删除日志。
hdfs.audit.log.maxfilesize=256MB
hdfs.audit.log.maxbackupindex=10
其他的日志也一起设置一下单个文件大小和最多log文件数量。
覆盖之后,只有重启Hadoop相关服务配置才会生效,但是在重启前建议将现有日志备份到其他位置,备份好之后再删除现有日志:
具体的日志位置可能会因不同的发行版而不同,但一版都会位于/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 我这边设置为7天
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
最后,作为一个备忘,我们将日志聚合的几个参数汇总一下,它们都在yarn-site.xml中配置,需要注意的是,在不同的发行版中,它们的默认值都是不尽相同的。
kafka-logs日志清理
先进入主题分区将.log
文件删除,然后修改kafka配置文件server.properties
: 路径一般设置在/etc/kafka/conf/下面
vim server.properties
log.retention.hours=24
log.cleaner.enable=ture
然后再设置log4j.properties
参照1. Hadoop/Yarn本地日志的清理
将日志的模式,log个数和log大小依次进行设置