linux—如何清除或合并hdfs中的数百万个文件?

ruoxqz4g  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(749)

在我们的datalake(hadoop/mapr/redhat)中,我们有一个包含超过40m个文件的目录。我们不能运行ls命令。
我试图启动hadoop命令getmerge来合并文件,但是没有输出。
hadoop fs-rm不太管用。
有没有其他方法可以查看此文件夹的内容?我怎么能不扫描就从中清除旧文件呢?
谢谢您

hc8w905p

hc8w905p1#

几件事。如果您有权访问namenode或secondary,则可以使用 hdfs oiv 将hdfs转储到脱机分隔文件,然后在其中查找路径。
hadoop有一个名为 .har 代表hadoop存档。如果你想保存你的文件,你应该考虑使用它,而不是 getmerge .
你可以用 distcp 删除目录。
您可以在/tmp中创建一个空hdfs目录,然后使用 distcp 并用更多的Map绘制器进行删除。

$ hdfs dfs -mkdir /tmp/empty_dir
$ hadoop distcp -m 20 -delete /tmp/empty_dir /PATH-OF-MILLION-FILES-DIR

这个 fs -rm -r 是单线程的,而 distcp 基于Map器并行运行。你应该使用 -delete 带的选项 distcp .
参考文献:
脱机图像查看器指南
hadoop存档指南
distcp版本2指南

brccelvz

brccelvz2#

fs -rm 将移动到hdfs垃圾箱,所以实际上您并没有删除任何记录,只是移动它们。
你需要加上 -skipTrash 为了净化的发生。如果我建议你分批清理
例如,删除所有以字母开头的文件 a ```
hdfs dfs -rm -R -skipTrash /path/data/a*

“getmerge”将所有记录下载到本地计算机上,因此最好确保有足够的磁盘空间
在hdfs中合并的唯一方法是mapreduce或spark任务。
这取决于您的文件格式,但filecrush是一个可以查看的库。但是,请记住,如果您想合并任何内容,您需要hdfs上至少120%的额外容量来复制数据+临时文件的开销

相关问题