Dataproc单节点集群中hadoop fs -df与-du的容量差异排查
HDFS容量统计差异原因及解决方法
差异原因
hdfs dfsadmin -report、hdfs dfs -df与hdfs dfs -du、hadoop fs -count的统计范围存在本质区别:
- 前两者统计的是HDFS文件系统的总存储占用,涵盖:
- 用户可直接访问的文件(即后两者统计的内容)
- 已删除但暂存于HDFS回收站的文件
- 已被NameNode标记删除,但DataNode尚未物理清理的块
- Spark流作业遗留的未清理临时文件(如Checkpoint过期状态文件、Shuffle临时文件)
- HDFS内部系统文件(如元数据备份块,占比通常极小)
- 后两者仅统计用户可直接访问的文件大小,默认不包含回收站、待删除块及HDFS系统文件。
结合你的长生命周期Dataproc单节点集群+Spark流作业场景,核心差异大概率来自Spark作业未自动清理的临时文件,以及HDFS回收站留存的已删除文件。
解决方法
1. 清理HDFS回收站
- 查看回收站内容:
hdfs dfs -ls /user/$(whoami)/.Trash - 手动清理回收站所有文件:
hdfs dfs -rm -r /user/$(whoami)/.Trash/* - 若无需回收站功能,可修改
hdfs-site.xml中的fs.trash.interval参数为0,禁用回收站(需重启NameNode生效)。
2. 清理Spark Checkpoint过期文件
- 定位Spark流作业的Checkpoint目录,查看文件列表:
hdfs dfs -ls /path/to/your/spark/checkpoint - 对于DStream作业,可设置
spark.streaming.checkpoint.cleanupDelay参数(单位:秒)让作业自动清理过期Checkpoint文件;若未配置,可手动删除旧批次状态文件(确保对应批次已完全处理):# 示例:删除7天前的Checkpoint文件 hdfs dfs -find /path/to/your/spark/checkpoint -type f -mtime +7 -delete - 对于Structured Streaming作业,确保
spark.sql.streaming.minBatchesToRetain参数设置合理(默认保留100个批次),避免旧状态文件堆积。
3. 清理HDFS临时文件
- 检查HDFS临时目录(如
/tmp)的占用情况:hdfs dfs -du -h /tmp - 清理过期临时文件(避免删除正在使用的文件,可先筛选创建时间较早的文件):
hdfs dfs -find /tmp -type f -mtime +1 -delete
4. 强制HDFS清理待删除块
- 同步NameNode与DataNode的块状态:
hdfs dfsadmin -refreshNodes - 检查并删除损坏或待删除的块(谨慎操作,先备份重要数据):
hdfs fsck / -delete
完成以上操作后,重新运行相关统计命令,两者结果会趋于一致。
内容的提问来源于stack exchange,提问作者AlexisBRENON
相关产品推荐
相关产品推荐

