HDFS中的checkpoint( 检查点 )的问题

本文介绍了一个CDH集群中SecondaryNameNode未能正常执行检查点操作的问题及其解决过程。该问题表现为集群健康测试结果异常,进一步分析发现是由于SecondaryNameNode执行检查点时出现IOException。文章详细解释了检查点的工作原理,并给出了通过清理相关目录后重启集群来解决问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题的描述

由于某种原因,需要在原来已经部署了Cloudera CDH集群上重新部署,重新部署之后,启动集群,由于Cloudera Manager 会默认设置dfs.namenode.checkpoint.perioddfs.namenode.checkpoint.txns分别是1个小时和1000000。只要达到这两个条件之一,secondarynamenode会执行checkpoint操作,此时会出现如下的问题:

ERROR:The health test result for NAME_NODE_HA_CHECKPOINT_AGE  has become bad: The filesystem checkpoint is 4 hour(s) old. This is 401.25% of the configured checkpoint period of 1 hour(s). Critical     threshold: 400.00%. 2,793 transactions have occurred since the last filesystem checkpoint. This is 0.28% of the configured checkpoint transaction target of 1,000,000.

经过初步分析,是由于secondarynamenode没有执行checkpoint的原因所导致,于是就查看了一下secondarynamenode的日志,发现真正的错误是:

  ERROR:  Exception in doCheckpoint java.io.IOException: Inconsistent checkpoint field

此时,说明查看个角色运行的日志很重要的,能够很精确的定位错误所在。

那么这两个问题的联系是什么呢?主要是secondarynamenode没有执行检查点的操作,导致会产生上面的错误,上面的错误说明的是你一直没有执行检查点的操作。下面的错误说明的是执行检查点操作失败,不执行。

2、问题的解决前的知识储备

在解决问题之前首先需要介绍一下检查点的作用及重要性

(1)检查点

  何为检查点:检查点是给secondarynamenode设置的,通过设置hdfs-site.xml中参数dfs.namenode.checkpoint.period和dfs.namenode.checkpoint.txns 来触发,只要达到这两个条件之一就可以出发secondarynamenode执行检查点的操作。

(2)检查点的的内容:

  secondarynamenode执行检查点的内容是首先从namenode中读取Fsimage,并执行namenode中editslog文件中的操作,并最终生成一个新的FSimage文件,并将这个文件上传给Namenode。注意 :在这个过程中,如果editlog没有任何的记录的话,达到了检查点的条件后,也由于没有发生任何改变,因此不执行检查点操作。

(3)检查点的作用:

  secondarynamenode执行这个检查点的操作,可以减少namenode的启动时间。

3、问题的解决方法

  通过真正的错误的描述,发现主要是版本不匹配,说明在重新安装CDH的时候,保留了以前版本的CDH的数据,导致不一致的版本问题,所以导致secondarynamenode不执行检查点的操作。那么解决办法就是删除之前的数据,所以通过删除secondarynamenode执行检查点是的目录,即hdfs-site.xml中参数fs.checkpoint.dir, dfs.namenode.checkpoint.dir的值的路径。

  删除之后,重新启动集群即可。

 

转载于:https://www.cnblogs.com/ljy2013/p/4705537.html

在 Apache Flink 中,检查点Checkpoint)机制是实现容错和状态一致性的重要组成部分。当使用 HDFS 作为检查点的存储后端时,如果出现写入失败的问题,可能涉及多个层面的原因,包括网络、权限配置、HDFS 集群状态以及 Flink 自身的配置等。 ### 检查点写入 HDFS 失败的常见原因及排查方法 #### 1. **HDFS 权限问题** Flink TaskManager 进程运行的用户需要对目标 HDFS 路径具有写权限。如果没有正确配置 Kerberos 认证或 POSIX 权限,则可能导致写入失败。 - 排查方法: - 使用 `hadoop fs -ls` 命令检查目标目录是否存在及其权限设置。 - 查看 Flink 日志中是否有类似 `Permission denied` 的异常信息。 - 如果启用了 Kerberos 安全认证,确保 Flink 配置文件中设置了正确的 keytab 和 principal。 #### 2. **HDFS 可用性与连接问题** HDFS 集群可能因网络问题、NameNode 不可用或 DataNode 空间不足等原因导致写入失败。 - 排查方法: - 检查 HDFS 是否处于安全模式(`hdfs dfsadmin -safemode get`),如果是,退出安全模式。 - 查看 HDFS 的 NameNode 和 DataNode 日志是否有异常。 - 确认 HDFS 集群空间是否充足。 - 测试从 Flink 部署节点手动写入 HDFS 文件以验证连通性。 #### 3. **Flink Checkpoint 配置不当** Flink 的 checkpoint 配置不正确也可能导致写入失败,例如路径不存在、状态后端配置错误等。 - 排查方法: - 确保在 Flink 配置中正确设置了 `state.checkpoints.dir` 和 `state.savepoints.dir`。 - 检查是否启用了 FsStateBackend 或 RocksDBStateBackend,并确认其配置是否与 HDFS 兼容。 - 在 `flink-conf.yaml` 中启用检查点日志记录:`state.backend.fs.memory-threshold: 1048576` 可帮助识别小状态写入失败的情况。 #### 4. **临时文件清理或锁竞争** Flink 在写入检查点时会创建临时文件(如 `.inprogress` 文件),如果这些文件被外部清理工具误删,或者存在多个 JobManager 同时尝试写入同一目录,会导致冲突。 - 排查方法: - 检查 HDFS 上的检查点目录是否包含 `.inprogress` 文件。 - 确保没有其他进程干扰检查点目录的内容。 - 设置合理的 `state.checkpoint.storage` 配置,避免共享同一个根目录。 #### 5. **序列化或状态大小问题** 如果状态过大或某些对象无法被正确序列化,也会导致写入失败。 - 排查方法: - 查看 Flink 日志中是否有 `ClassNotFoundException` 或 `NotSerializableException`。 - 使用 RocksDBStateBackend 并启用增量检查点功能(适用于大状态场景)。 - 启用状态大小监控,设置 `state.size` 相关参数来限制最大状态大小。 #### 6. **HDFS 写入性能瓶颈** 在高并发或大数据量场景下,HDFS 的写入吞吐可能成为瓶颈,导致超时或失败。 - 解决方案: - 增加 HDFS 的副本数或调整 `dfs.client.write.packet.size` 提高写入效率。 - 使用异步快照机制(Async Snapshotting)减少主任务线程阻塞时间。 - 启用压缩(Compression)减少写入数据量。 --- ### 示例配置片段 ```yaml # flink-conf.yaml state.backend: filesystem state.checkpoints.dir: hdfs://namenode:9000/flink/checkpoints state.savepoints.dir: hdfs://namenode:9000/flink/savepoints state.checkpoint.storage: filesystem state.backend.fs.memory-threshold: 1048576 state.checkpoints.num-retained: 3 high-availability.storageDir: hdfs://namenode:9000/flink/ha ``` --- ### 总结 Flink 检查点写入 HDFS 失败通常涉及权限、连接、配置、状态管理等多个方面。建议按照以下顺序进行排查: 1. 检查 HDFS 权限与可用性; 2. 核实 Flink 配置是否正确; 3. 查看 Flink 日志中的具体错误信息; 4. 分析状态大小与序列化问题; 5. 调整性能相关参数优化写入效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值