在我们的 Datalake (Hadoop/Mapr/Redhat) 中,我们有一个包含超过 40M 文件的目录。我们无法运行 ls 命令。
我尝试启动 hadoop 命令 getmerge 来合并文件,但没有输出。
Hadoop fs -rm 也不起作用。
还有其他方法可以查看此文件夹的内容吗?如何在不扫描的情况下从中清除旧文件?
谢谢
最佳答案
几件事。如果您有权访问名称节点或辅助节点,您可以使用 hdfs oiv
将 HDFS 转储到离线分隔文件,然后找到您正在寻找的路径。
Hadoop 有一种名为 .har
的现有文件格式,代表 Hadoop 存档。如果你想保留你的文件,你应该考虑使用它而不是 getmerge
。
您可以使用distcp
来删除目录。
您可以在/tmp 中创建一个空的 HDFS 目录,然后使用 distcp
将空目录复制到包含 40M 文件的目录中,并使用更多映射器进行删除。
$ hdfs dfs -mkdir /tmp/empty_dir
$ hadoop distcp -m 20 -delete /tmp/empty_dir /PATH-OF-MILLION-FILES-DIR
fs -rm -r
是单线程的,而 distcp
基于映射器并行运行。您应该将 -delete
选项与 distcp
一起使用。
引用资料:
关于linux - 我如何清除或合并 HDFS 中的数百万个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071575/