如何*真正*从 hdfs 回收磁盘 space

How to *really* reclaim disk space from hdfs

第一步是

hdfs dfs -rmr <path>

这会将文件丢弃到 /.Trash 但不会删除它们。

下一步是

hdfs dfs -expunge

尚不清楚实际执行的是什么 - 因为之后我们仍然看到:

$ hdfs dfs -du -h
279.4 G  .Trash

那么 .. 如何让 .Trash 一劳永逸地 poof ..

删除时尝试使用 -skiptrash 选项。这将永远删除。

expunge 似乎导致垃圾收集被安排

hdfs dfs -expunge
15/08/30 19:34:32 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 360 minutes, Emptier interval = 0 minutes.
15/08/30 19:34:32 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/stack/.Trash/150830193432

请注意,垃圾的 检查点 已创建。有点令人担忧的是 Emptier interval0。那么,什么时候真正删除数据..

以下是 core-site.xml 设置(感谢此 SOF 回答 How To Automate Hadoop Trash Cleanup 找到它们):

https://github.com/cloudera/hadoop-common/blob/ca2ff489eb805da4700fb15fa49e539f1c195b89/src/java/core-default.xml#L216-L225

<property>
  <name>fs.trash.interval</name>
  <value>0</value>
  <description>Number of minutes after which the checkpoint
  gets deleted.
  If zero, the trash feature is disabled.
  </description>
</property>

<property>
  <name>fs.trash.checkpoint.interval</name>
  <value>0</value>
  <description>Number of minutes between trash checkpoints.
  Should be smaller or equal to fs.trash.interval.
  Every time the checkpointer runs it creates a new checkpoint 
  out of current and removes checkpoints created more than 
  fs.trash.interval minutes ago.
  </description>
</property>

我正在研究将这些值设置为零的实际效果。这似乎与启用的 Trash 功能不一致..