如何统计指定HDFS路径下所有时间戳子目录中的总文件数量
HDFS指定路径下总文件数统计命令
有成熟的命令可以实现你的需求,以下两种是生产环境常用的方案:
方案一:hadoop fs -count 命令(推荐,性能更高)
该命令是HDFS原生提供的统计命令,不需要逐行解析文件列表,大文件量场景下速度远快于ls方案:
# 统计所有YYYY-MM-DD格式子目录下的总文件数 hadoop fs -count -R /user/label/202[0-9]-[01][0-9]-[0-3][0-9] | awk '{sum += $2} END {print "总文件数:" sum}'
- 逻辑说明:
-R代表递归遍历所有子目录- 路径后的通配符仅匹配
YYYY-MM-DD格式的日期目录,避免统计到同路径下其他非目标目录 hadoop fs -count默认输出第二列为文件数,awk对所有行的第二列求和得到总文件数
方案二:hadoop fs -ls 配合管道统计
该方案灵活度更高,适合需要额外做文件过滤的场景(比如只统计特定后缀的文件):
# 递归列出所有文件,过滤目录行后统计行数 hadoop fs -ls -R /user/label/202[0-9]-[01][0-9]-[0-3][0-9] | grep -v '^d' | wc -l
- 逻辑说明:
grep -v '^d'过滤掉行首为d的目录行,仅保留文件行wc -l统计剩余行数,即总文件数
注意事项
如果不需要限制只统计日期格式子目录,直接把路径后的通配符去掉,换成目标根路径即可。如果你的集群开启了回收站功能,统计时注意排除.Trash目录避免计数偏差。
内容的提问来源于stack exchange,提问作者Bowen Peng
相关产品推荐
相关产品推荐

