温馨提示×

CentOS HDFS容量不足怎么解决

小樊
45
2025-11-16 05:13:57
栏目: 智能运维

CentOS 上 HDFS 容量不足的排查与解决

一、快速定位与应急释放

  • 查看整体容量与节点使用:执行命令:hdfs dfsadmin -reporthdfs dfs -df -h,确认容量、已用、剩余以及各 DataNode 磁盘占用是否均衡。若 NameNode 处于安全模式导致写入受阻,可执行:hdfs dfsadmin -safemode leave
  • 清理回收站释放空间:HDFS 删除默认进入回收站(/user/用户名/.Trash),可立即清空或触发检查点清理:
    • 清空当前用户回收站:hdfs dfs -rmr -skipTrash /user/$USER/.Trash
    • 触发回收站检查点:hdfs dfs -expunge(后台线程按策略清理,非即时)
  • 删除无用数据或目录:对确认不再需要的数据执行删除,必要时跳过回收站:hdfs dfs -rm -r -skipTrash /path/to/dir
  • 若因目录配额导致写入失败(DiskSpaceQuotaExceededException),可临时放宽或清除配额:
    • 查看/设置目录空间配额:hdfs dfsadmin -setSpaceQuota /pathhdfs dfsadmin -clrSpaceQuota /path
    • 查看/设置目录文件数配额:hdfs dfsadmin -setQuota /pathhdfs dfsadmin -clrQuota /path
  • 应急扩容带宽并均衡数据分布(避免单机先满):
    • 提高均衡器带宽(示例为 50MB,请结合业务窗口调整):hdfs balancer -setBalancerBandwidth 52428800
    • 启动均衡:hdfs balancer(或 start-balancer.sh),等待各节点使用率趋同。

二、中期优化降低占用

  • 调整副本因子:对非关键/可重建数据,将 dfs.replication3 降到 2,可立即节省约 33% 空间(权衡容错与成本)。
  • 启用纠删码(HDFS 3.x):对冷数据使用 Reed-Solomon 等纠删码策略,在提供相近容错的同时显著降低存储开销(通常低于三副本)。
  • 压缩存储:写入前采用 Snappy/LZO/Gzip 等压缩,兼顾压缩比与解压速度,减少空间占用与网络传输量。
  • 合并小文件/优化块大小:避免海量小文件增加 NameNode 元数据压力;按数据特征调整 dfs.blocksize(如 128MB/256MB),大文件适当增大块大小,小文件场景可考虑合并或选用更合适的块大小。
  • 数据生命周期与归档:对历史冷数据设置 TTL 自动过期清理;对访问频率低的数据可归档为 HAR 等格式,降低占用并提升目录扫描效率。

三、长期扩容与架构调整

  • 横向扩容:新增 DataNode 节点,安装 Hadoop 并使其配置与集群一致,启动 DataNode 后通过 hdfs dfsadmin -reportNameNode Web UI(50070) 确认加入,随后执行 Balancer 使数据均匀分布。
  • 多磁盘与目录:在 hdfs-site.xml 中为 dfs.datanode.data.dir 配置多块磁盘目录,提升容量与吞吐;为 dfs.datanode.du.reserved 预留系统盘空间,避免 DataNode 磁盘被写满导致异常。
  • 存储策略优化:结合业务 SLA 与访问特征,对热数据保持较高副本或本地性,对冷数据采用纠删码与归档策略,形成分层存储。
  • 监控与容量规划:持续监控 NameNode/DataNode 容量、Balancer 进度与异常告警,结合增长趋势进行容量预测与扩容节奏规划。

四、常见错误与处理要点

  • 安全模式导致写入失败:执行 hdfs dfsadmin -safemode leave 退出后再写入。
  • 回收站未清空导致空间不释放:执行 hdfs dfs -expunge-rmr -skipTrash 清理回收站。
  • 目录配额超限:使用 -setSpaceQuota/-clrSpaceQuota 调整或清除配额限制。
  • DataNode 磁盘满或写入异常:检查 df -hhdfs dfsadmin -report,清理无用数据后执行 Balancer;必要时新增磁盘或 DataNode

五、常用命令速查

  • 容量与节点:hdfs dfsadmin -reporthdfs dfs -df -h
  • 配额管理:hdfs dfsadmin -setQuota N /path-clrQuota /path-setSpaceQuota N /path-clrSpaceQuota /path
  • 清理回收站:hdfs dfs -rmr -skipTrash /user/$USER/.Trashhdfs dfs -expunge
  • 删除数据:hdfs dfs -rm -r -skipTrash /path
  • 均衡器:hdfs balancer -setBalancerBandwidth 52428800hdfs balancer
  • 扩容验证:hdfs dfsadmin -reporthttp://namenode:50070

0