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

Mah*_*hdi 3 linux command-line hadoop hdfs apache-spark

我想开始一个 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

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

gsa*_*ras 5

如果我是你,我会遵循另一个答案......


如果你真的知道自己在做什么,那么你可以这样做:

[gsamaras@gwta3000 ~]$ hadoop fs -rm -f -r -skipTrash /path/to/dirToBeDeleted
Deleted /path/to/dirToBeDeleted
Run Code Online (Sandbox Code Playgroud)

我在阅读完以下内容后组装的:如何在终端中删除非空目录?和其余的..


当你删除一个文件或一个目录时,它会进入垃圾箱,但是当你删除垃圾箱时,有一个时间间隔(可以配置,取决于你的设置,我的是1小时),必须经过这个时间间隔,以便真正删除发生。

这个想法是,您可能会意外删除一些重要的内容(或使用大量计算能力后生成的内容),并且该配置使您有机会恢复数据。

如果您不确定如何继续,那么我建议您等待至少一个小时,然后重试,否则..


从该链接,有一个列表提出了一些想法:

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