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