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

标签 linux hadoop

在我们的 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/

相关文章:

hadoop - 在不上传到HDFS的情况下访问本地文件系统

hadoop - 如何搭建大数据平台,在Hadoop中接收和存储大数据

hadoop - hive 顺序按1升序排列会导致错误

c - semop 调用中 EIDRM 和 EINVAL errno 之间的区别

java - Raspberry pi - java - 串行通信

hadoop - 使用 copyToLocal 从 HDFS 复制的路径

hadoop - 为区域服务器(HBase)寻找事件线程

regex - SED删除C程序注释

python - 在追加文件时,数据没有写入文件,而在读取文件时,它在 python 中显示空字节

linux - 是否有用于 shell 脚本的 GUI 调试器