在我们的datalake(hadoop/mapr/redhat)中,我们有一个包含超过40m个文件的目录。我们不能运行ls命令。我试图启动hadoop命令getmerge来合并文件,但是没有输出。hadoop fs-rm不太管用。有没有其他方法可以查看此文件夹的内容?我怎么能不扫描就从中清除旧文件呢?谢谢您
hc8w905p1#
几件事。如果您有权访问namenode或secondary,则可以使用 hdfs oiv 将hdfs转储到脱机分隔文件,然后在其中查找路径。hadoop有一个名为 .har 代表hadoop存档。如果你想保存你的文件,你应该考虑使用它,而不是 getmerge .你可以用 distcp 删除目录。您可以在/tmp中创建一个空hdfs目录,然后使用 distcp 并用更多的Map绘制器进行删除。
hdfs oiv
.har
getmerge
distcp
$ 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指南
fs -rm -r
-delete
brccelvz2#
fs -rm 将移动到hdfs垃圾箱,所以实际上您并没有删除任何记录,只是移动它们。你需要加上 -skipTrash 为了净化的发生。如果我建议你分批清理例如,删除所有以字母开头的文件 a ```hdfs dfs -rm -R -skipTrash /path/data/a*
fs -rm
-skipTrash
a
“getmerge”将所有记录下载到本地计算机上,因此最好确保有足够的磁盘空间 在hdfs中合并的唯一方法是mapreduce或spark任务。 这取决于您的文件格式,但filecrush是一个可以查看的库。但是,请记住,如果您想合并任何内容,您需要hdfs上至少120%的额外容量来复制数据+临时文件的开销
2条答案
按热度按时间hc8w905p1#
几件事。如果您有权访问namenode或secondary,则可以使用
hdfs oiv
将hdfs转储到脱机分隔文件,然后在其中查找路径。hadoop有一个名为
.har
代表hadoop存档。如果你想保存你的文件,你应该考虑使用它,而不是getmerge
.你可以用
distcp
删除目录。您可以在/tmp中创建一个空hdfs目录,然后使用
distcp
并用更多的Map绘制器进行删除。这个
fs -rm -r
是单线程的,而distcp
基于Map器并行运行。你应该使用-delete
带的选项distcp
.参考文献:
脱机图像查看器指南
hadoop存档指南
distcp版本2指南
brccelvz2#
fs -rm
将移动到hdfs垃圾箱,所以实际上您并没有删除任何记录,只是移动它们。你需要加上
-skipTrash
为了净化的发生。如果我建议你分批清理例如,删除所有以字母开头的文件
a
```hdfs dfs -rm -R -skipTrash /path/data/a*