20260326 HDFS更改数据目录导致NameNode无法启动

问题描述:

由于一开始硬盘还未挂载目录,安装cdh时,配置hdfs相关数据目录就用了默认的系统盘下的目录,如下

/data/dfs/nn /data/dfs/jn /data/dfs/dn

后面数据盘挂载在/hadoop/data1/下,固将hdfs的数据目录改为

/hadoop/data1/dfs/nn /hadoop/data1/dfs/jn /hadoop/data1/dfs/dn

重新启动hdfs,报错,分为三类:

  • nameNode 无法格式化
  • 丢失块信息100%
  • Cloudera Manager 无法检测 HDFS 健康状态

解决:

  1. 停掉hdfs所有服务
  2. 清空/hadoop/data1/dfs/nn /hadoop/data1/dfs/jn /hadoop/data1/dfs/dn
  3. 启动dataNode,failoverController 等服务(除NameNode,journalNode外)
  4. 对activity NameNode执行format操作
  5. 启动所有journalNode
  6. 启动activity NameNode
  7. 对Standby NameNode执行Bootstrap Standby操作
  8. 启动Standby NameNode
  9. ssh客户端以hdfs用户执行hdfs dfs -chmod -R 777 /data/tmp 等命令,完成以下目录创建及赋权,后续通过ranger做权限收口
[hdfs@cdhmaster02 ~]$ hdfs dfs -ls Found 3 items
drwxrwxrwt   - hdfs supergroup          0 2026-03-26 12:31 /data
drwxrwxrwt   - hdfs supergroup          0 2026-03-26 17:25 /tmp
drwxr-xr-x   - hdfs supergroup          0 2026-03-26 17:24 /user

注意事项:

  • 操作顺序不可颠倒,否则可能导致 NameNode 或 JournalNode 数据不一致
  • 不能对 Standby NameNode 执行 format,否则会破坏 HA 集群
  • **(重要)**清空目录操作仅限于尚未存储业务数据的集群或测试环境
  • 如果要迁移已有数据的数据目录,则需要rsync -avh /data/dfs/nn/ /hadoop/data1/dfs/nn/类似命令

原因解释:

  1. NameNode 无法格式化
    • HDFS 的 HA 模式下,Active NameNode 的元数据(fsimage + edits)必须与 Quorum Journal Nodes 保持一致。
    • 修改 HDFS 存储目录后,如果 JournalNode 目录仍保留旧数据或未初始化,NameNode 在检查 quorum 时会发现元数据不匹配,因此无法格式化。
    • 关键点:只允许对 Active NameNode 格式化,Standby NameNode 或 JournalNode 不能直接 format,否则会破坏 HA 的一致性机制。
  2. 丢失块信息 100%
    • DataNode 存储目录修改后,旧数据无法被 NameNode 正确识别,因为 NameNode 的 fsimage 中没有对应块信息。
    • NameNode 启动时会扫描 DataNode 上报的块,如果目录未初始化或数据不匹配,则所有块都被标记为丢失,从而导致 CM 显示 100% missing blocks。
    • 关键点:HDFS 的块映射严格依赖 NameNode 的元数据,DataNode 目录未同步会造成“逻辑丢失”,即使物理数据存在。
  3. Cloudera Manager 无法检测 HDFS
    • CM Canary 测试依赖基本的 HDFS I/O 操作(创建、写入、读取、删除文件)。
    • 当 NameNode 在安全模式或丢失块状态下,读写请求无法完成,Canary 测试失败,导致 CM 显示健康异常。
    • 关键点:CM 健康检测反映的是 NameNode 和 DataNode 的可用性与一致性,而非磁盘本身状态。
  4. 操作顺序要求严格
    • Active NameNode 必须先格式化并启动,使元数据初始化完成。
    • JournalNode 启动后才能形成 Quorum,保证 HA 的 edit log 复制。
    • Standby NameNode 只能通过 Bootstrap Standby 从 Active NameNode 同步元数据,否则会破坏 HA 的一致性,导致集群无法启动。
    • 关键点:HDFS HA 的核心机制是 edit log 的 quorum 写入与 NameNode 状态同步,顺序错误会导致集群不可用。