我的问题是:hadoop回收站为什么会保留多个过期时间的数据
我们知道hadoop的回收站是在我们删除数据后能恢复的目录,但是我们并不希望在回收站保存太久的数据,我们可以使用如下参数进行配置。
在core-site.xml中配置如下参数
<property>
<name>fs.trash.interval</name>
<value>5</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>5</value>
</property>
参数介绍:
fs.trash.interval=0
以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。如果是0,垃圾回收机制关闭。
可以配置在服务器端和客户端。
如果在服务器端配置trash无效,会检查客户端配置。如果服务器端配置有效,客户端配置会忽略。
建议开启,建议4320(3天)
垃圾回收站,如有同名文件被删除,会给文件顺序编号,例如:a.txt,a.txt(1)
fs.trash.checkpoint.interval=0
以分钟为单位的垃圾回收检查间隔。应该小于或等于fs.trash.interval。如果是0,值等同于fs.trash.interval。每次检查器运行,会创建新的检查点。
建议设置为60(1小时)
我遇到的情况:
测试环境,只配置了fs.trash.interval参数,参数内容如下
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
checkpoint并没有配置,那检测点应该是按天来检测,我们可以在namenode的日志中看到
这样就会导致我回收站里会存放两天的数据,现在集群的空间不是很足,不希望保存那么久的数据在回收站里
原因分析:
导致上面的问题所在是因为,日志过期时间为1天,数据监测间隔没有设置,默认值是跟过期时间一样也是一天,这样就是当我日志在晚上18:56删除的时候,早上检测点是8点,由于时间没有过期,所以会保留昨天18:56的数据,然后今天晚上的18:56也会删除数据,所以最后导致会存两天的垃圾数据。
应该怎么解决了,可以如下解决:
修改检测点,调整fs.trash.checkpoint.interval为2小时
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
</property>