【发布时间】:2017-04-10 05:07:35
【问题描述】:
我在 Cento 7.2 上的单节点 hadoop 集群 HDFS 中有 400 万个文件。由于我的应用程序的一些损坏,数十万个重复文件存储在 HDFS 中。我想从 hdfs 中删除这些文件。
我尝试使用 shell 脚本执行此操作,但它需要很多时间(2 天内 100k 个文件)。脚本包含单个命令(hdfs dfs -rm --skipTrash <file path>)
【问题讨论】:
-
如果可以,为什么不删除目录。
-
如果有效文件列表很小,则将它们移动到不同的目录,然后删除该目录。发布将有效文件移回原始目录。
-
为什么不将所有文件作为参数传递给单个
hdfs dfs -rm命令?单独运行它们会打开和关闭与 Namenode 的客户端连接,并且需要更多时间。 -
这是 bash 的限制。
getconf ARG_MAX应该为您提供可以传递给命令的最大参数数。根据这个值修改命令。 -
在单个命令中传递所有文件路径并增加 arg_max 解决了这个问题。还需要增加hadoop_client_heap大小