超过命名空间配额时如何清空hadoop上的垃圾?

How to empty trash on hadoop when namespace quota is exceeded?

我想启动一个 hadoop 流式处理作业,但失败了,提示: 15/05/19 23:17:34 ERROR streaming.StreamJob: Error Launching job : The NameSpace quota (directories and files) of directory /user/myname is exceeded: quota=1000000 file count=1000001

我尝试使用 hdfs dfs -rm -r -f files 删除一些文件,但报告文件已移至回收站。然后我尝试 hdfs dfs -expunge 然后我回来了:

15/05/19 23:12:32 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. 15/05/19 23:12:33 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/myname/.Trash/150519231233

但我仍然得到原来的错误。我该怎么办?

原来只需要等几个小时,一切就都安定下来了!

如果我是你,我会按照另一个答案...


如果你真的知道你在做什么,那么你可以做到:

[gsamaras@gwta3000 ~]$ hadoop fs -rm -f -r -skipTrash /path/to/dirToBeDeleted
Deleted /path/to/dirToBeDeleted

我在阅读后组装的:How to delete a non-empty directory in Terminal? 和其余的..


当你删除一个文件或一个目录时,它会进入回收站,但是当你删除回收站时,有一个间隔(这是可配置的,取决于你的设置,我的是1h),它必须经过,以便实际删除发生。

我们的想法是,您可能会不小心删除一些重要的东西(或在使用大量计算能力后生成的东西),并且该配置为您提供了恢复数据的机会。

如果您不确定如何进行,那么我建议您至少等待一个小时,然后再试一次,否则..


从那个link,有这个列表提出了一些想法:

  1. 告诉用户删除大文件时使用 -Dfs.trash.interval=0 目录
  2. 从配额中排除 /user/<username>/.Trash
  3. .Trash 移出 /user directory。也许 /Trash/<username> 并设置不同的配额。
  4. -rm/rmr配额失败时,自动删除它们。
  5. 引入执行 (1) 的单独命令。类似于 -rmr -skipTrash 用于强制删除。