我如何在HDFS中清除或合并数百万个文件?

问题描述 投票:4回答:2

在我们的Datalake(Hadoop / Mapr / Redhat)中,我们有一个包含超过40M文件的目录。我们无法运行ls命令。

我试图启动hadoop命令getmerge来合并文件,但我没有输出。

Hadoop fs -rm也不起作用。

有没有其他方法可以查看此文件夹的大陆?如何在没有扫描的情况下从中清除旧文件?

谢谢

linux hadoop
2个回答
1
投票

几件事。如果您可以访问namenode或secondary,则可以使用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

参考文献:


0
投票

fs -rm将转移到HDFS垃圾箱,所以你实际上并没有删除任何记录,只是移动它们。

您需要添加-skipTrash才能进行清除。如果建议您分批清洗

例如,删除以字母a开头的所有文件

hdfs dfs -rm -R -skipTrash /path/data/a*

'getmerge`将所有记录下载到本地计算机,因此您最好确保有足够的磁盘空间

在HDFS中合并的唯一方法是MapReduce或Spark任务。

这取决于您的文件格式,但FileCrush是您可以查看的库。但是,请记住,如果要合并任何内容,则在HDFS上需要至少120%的额外容量来复制临时文件的数据和开销

© www.soinside.com 2019 - 2024. All rights reserved.