首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Every Day of a DBA,第141期:HDFS DataNode 块校验日志 dncp_block_verification.log.prev 的处理

Every Day of a DBA,第141期:HDFS DataNode 块校验日志 dncp_block_verification.log.prev 的处理

作者头像
用户3107127
发布2026-07-09 16:06:23
发布2026-07-09 16:06:23
30
举报

作者:bytehouse

Oracle ACE、PostgreSQL ACE

10+年数据库架构与运维实战经验

公众号:bytehouse

墨天轮专栏:bytehouse

CSDN:Young DBA

摘要:

服务器磁盘故障,未及时处理,导致其他节点的磁盘空间爆满,查看磁盘占用发现了该文件 dncp_block_verification.log.prevdncp_block_verification.log.curr。分析该文件产生的原因和处理过程。

一、目录结构与文件说明

1. DataNode 标准存储目录(你的现场结构)

代码语言:javascript
复制
hdfsdata/
├── current
│   ├── BP-xxx-NameNodeIP-时间戳  # BlockPool 目录
│   │   ├── current               # 真实数据目录
│   │   │   ├── VERSION
│   │   │   ├── finalized         # 已完成写入的正式数据块
│   │   │   │   └── subdir0/subdir1/blk_xxx / blk_xxx.meta
│   │   │   ├── lazyPersist
│   │   │   └── rbw               # 正在写入的数据块(Replica Being Written)
│   │   ├── dncp_block_verification.log.curr  # 当前块校验日志
│   │   ├── dncp_block_verification.log.prev  # 历史滚动日志(占用空间大的文件)
│   │   └── tmp
│   └── VERSION
└── in_use.lock  # 锁文件,防止多进程同时挂载目录

2. 核心文件释义

  1. BP-xxx 目录:BlockPool,格式 BP-随机数-NameNode地址-集群创建时间,HDFS 块池目录。
  2. finalized / rbw
    • finalized:存储已落地完成的 HDFS 数据块 blk_xxx,搭配 .meta 校验和文件;
    • rbw:存储正在写入的临时数据块。
  3. dncp_block_verification.log
    • 作用:记录每个数据块的 checksum 校验结果、扫描时间,用于数据完整性校验;
    • .curr:当前正在写入的校验日志;
    • .prev:日志滚动后归档的旧日志,本次占用大量空间的目标文件
  4. in_use.lock:目录锁,避免多个 DataNode 进程同时操作数据目录,造成数据损坏。

二、文件暴涨原因分析

dncp_block_verification.log.prev 异常增大,本质是 DataNode 频繁执行块校验,日志持续刷写:

  1. 磁盘硬件异常:磁盘坏道、IO 报错,DataNode 反复重试校验数据块;
  2. HDFS 数据异常:集群存在损坏块、丢失副本,触发全量扫描校验;
  3. 配置不合理:日志行数上限过大、日志滚动间隔太短,导致日志无限膨胀。

重要结论:.prev 为归档旧日志,清空/删除不会影响 HDFS 数据与业务;严禁直接删除 .curr 日志(建议停服务后操作)。


三、实操步骤(按顺序执行)

步骤1:定位文件 & 查看占用大小

假设 DataNode 根目录为 /hdfsdata,执行以下命令:

代码语言:javascript
复制
# 1. 查找所有校验日志文件
find /hdfsdata -name"dncp_block_verification.log.*"

# 2. 查看 .prev 文件占用空间
du -sh /hdfsdata/current/BP-*/dncp_block_verification.log.prev

步骤2:紧急清理(在线执行,无需停服务,推荐)

采用清空文件方式(保留文件句柄,无进程影响、零风险):

代码语言:javascript
复制
# 方式1:truncate 清空(推荐)
truncate -s0 /hdfsdata/current/BP-*/dncp_block_verification.log.prev

# 方式2:重定向清空(等效)
> /hdfsdata/current/BP-*/dncp_block_verification.log.prev
备选方案:直接删除(需停止 DataNode)

若需要彻底删除文件,先停服务再操作,避免句柄残留:

代码语言:javascript
复制
# 1. 停止 DataNode 服务
systemctl stop hadoop-hdfs-datanode

# 2. 删除旧日志
rm-f /hdfsdata/current/BP-*/dncp_block_verification.log.prev

# 3. 重启 DataNode
systemctl start hadoop-hdfs-datanode

步骤3:根因排查(避免日志再次暴涨)

清理后必须排查异常,否则问题会反复出现:

代码语言:javascript
复制
# 1. 查看 DataNode 运行日志,检索 IO/块校验报错
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log | grep-i error

# 2. 检查服务器磁盘硬件状态
dmesg | grep-i error
smartctl -a /dev/sdX  # 替换为数据盘盘符

# 3. 检查 HDFS 集群损坏数据块
hdfs fsck / -list-corruptfileblocks

步骤4:永久优化配置(所有 DataNode 节点统一修改)

修改 HDFS 配置文件 hdfs-site.xml,限制日志大小与滚动频率:

代码语言:javascript
复制
<!-- 限制块校验日志最大行数,避免无限膨胀 -->
<property>
    <name>dfs.datanode.block.verification.log.max.lines</name>
    <value>100000</value>
</property>

<!-- 日志最小滚动间隔(单位:毫秒),设置为1小时,避免频繁生成 .prev 日志 -->
<property>
    <name>dfs.datanode.block.verification.log.min.rolling.period</name>
    <value>3600000</value>
</property>

配置生效:重启 DataNode 服务

代码语言:javascript
复制
systemctl restart hadoop-hdfs-datanode

四、完整操作流程总结

  1. df -h 确认磁盘分区使用率;
  2. find + du 定位并确认 dncp_block_verification.log.prev 位置与大小;
  3. 在线执行 truncate 清空日志,快速释放存储空间;
  4. 查看 DataNode 日志、磁盘状态、HDFS 坏块,修复底层异常;
  5. 所有 DataNode 节点修改 hdfs-site.xml 配置,限制日志大小;
  6. 重启 DataNode 使配置生效,长期监控日志增长情况。

五、注意事项

  1. 仅操作 .prev 文件,禁止在线删除/清空 .curr 日志
  2. 优先使用 truncate 在线清空,业务无感知;
  3. 集群所有 DataNode 需统一修改配置,避免节点差异;
  4. 若频繁出现日志暴涨,优先排查磁盘硬件与 HDFS 坏块。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ByteHouse 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要:
    • 一、目录结构与文件说明
      • 1. DataNode 标准存储目录(你的现场结构)
      • 2. 核心文件释义
    • 二、文件暴涨原因分析
    • 三、实操步骤(按顺序执行)
      • 步骤1:定位文件 & 查看占用大小
      • 步骤2:紧急清理(在线执行,无需停服务,推荐)
      • 步骤3:根因排查(避免日志再次暴涨)
      • 步骤4:永久优化配置(所有 DataNode 节点统一修改)
    • 四、完整操作流程总结
    • 五、注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档