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 状态同步,顺序错误会导致集群不可用。

2026年3月26日 · 1 分钟

CDH基础配置及优化

一、hive中文注释乱码 1、设置 hive 元数据库字符集 show create database hive; 查看为 utf8,需变更为 latin1 alter database hive character set latin1; 2、更改如下表字段为字符集编码为 utf8 ①修改表字段注解和表注解 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; ② 修改分区字段注解: alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; ③修改索引注解: alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; ...

2026年2月1日 · 2 分钟

CDH6.3.2集群部署

使用ansible做自动化部署 CDH 集群安装指南 环境准备 项目 值 NFS 服务器 xxx.xxx.xxx.xxx:/nfs/share Inventory inventory/cdh-init.ini 安装步骤 步骤 1:配置 /etc/hosts 和挂载 NFS ansible-playbook cdh-hosts-nfs.yml -i inventory/cdh-init.ini 步骤 2:系统初始化 ansible-playbook cdh-init-raw.yaml -i inventory/cdh-init.ini 验证 # 验证 NFS 挂载 ansible cdh_all -i inventory/cdh-init.ini -m shell -a "ls /mnt" -b # 验证 Java ansible cdh_all -i inventory/cdh-init.ini -m shell -a "java -version" # 验证 SELinux ansible cdh_all -i inventory/cdh-init.ini -m shell -a "sestatus" # 验证 haveged ansible cdh_all -i inventory/cdh-init.ini -m shell -a "systemctl status haveged" 安装介质目录 /mnt/ ├── cdh/ # CDH Parcel ├── ClouderaManager/ # CM 6.3.1 └── mysql/ # MySQL 5.7 RPM

2026年1月30日 · 1 分钟

hdfs文件未关闭

问题描述: 使用hive load hdfs文件时报错: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Cannot obtain block length for LocatedBlock{BP-1984322900-192.168.102.3-1594185446267:blk_1180034904_106295094; getBlockSize()=4179; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[192.168.102.11:9866,DS-cb5a2e07-20e9-45fd-869b-5d8b4ad170a4,DISK], DatanodeInfoWithStorage[192.168.102.9:9866,DS-74706bce-bb23-4aaf-a6eb-ceaa9bdbf38c,DISK], DatanodeInfoWithStorage[192.168.102.5:9866,DS-57f122fb-b6ca-437c-a52e-5f81efdd239c,DISK]]} 22/02/23 16:31:17 ERROR ql.Driver: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Cannot obtain block length for LocatedBlock{BP-1984322900-192.168.102.3-1594185446267:blk_1180034904_106295094; getBlockSize()=4179; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[192.168.102.11:9866,DS-cb5a2e07-20e9-45fd-869b-5d8b4ad170a4,DISK], DatanodeInfoWithStorage[192.168.102.9:9866,DS-74706bce-bb23-4aaf-a6eb-ceaa9bdbf38c,DISK], DatanodeInfoWithStorage[192.168.102.5:9866,DS-57f122fb-b6ca-437c-a52e-5f81efdd239c,DISK]]} 分析问题: 可得知hdfs文件块出现异常,Cannot obtain block length for LocatedBlock,无法获取块文件长度信息 猜测是因为昨日yarn重启导致hdfs文件未关闭写状态 解决问题: 对hive load hdfs文件的地址执行检查命令 ...

2024年9月28日 · 2 分钟

hdfs文件块异常

问题描述: 使用hive load hdfs文件时报错: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Cannot obtain block length for LocatedBlock{BP-1984322900-192.168.102.3-1594185446267:blk1180034904106295094; getBlockSize()=4179; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[192.168.102.11:9866,DS-cb5a2e07-20e9-45fd-869b-5d8b4ad170a4,DISK], DatanodeInfoWithStorage[192.168.102.9:9866,DS-74706bce-bb23-4aaf-a6eb-ceaa9bdbf38c,DISK], DatanodeInfoWithStorage[192.168.102.5:9866,DS-57f122fb-b6ca-437c-a52e-5f81efdd239c,DISK]]} 22/02/23 16:31:17 ERROR ql.Driver: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Cannot obtain block length for LocatedBlock{BP-1984322900-192.168.102.3-1594185446267:blk1180034904106295094; getBlockSize()=4179; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[192.168.102.11:9866,DS-cb5a2e07-20e9-45fd-869b-5d8b4ad170a4,DISK], DatanodeInfoWithStorage[192.168.102.9:9866,DS-74706bce-bb23-4aaf-a6eb-ceaa9bdbf38c,DISK], DatanodeInfoWithStorage[192.168.102.5:9866,DS-57f122fb-b6ca-437c-a52e-5f81efdd239c,DISK]]} 分析问题: 可得知hdfs文件块出现异常,Cannot obtain block length for LocatedBlock,无法获取块文件长度信息 因为昨日CDH重启导致hdfs文件未关闭写状态 解决问题: 对hive load hdfs文件的地址执行检查命令 ...

2024年9月14日 · 2 分钟

部署CDH踩坑总结

1.zookeeper刚启动时会报错,晾它两分钟会就好了 2.更改或迁移服务时一定要切换到维护模式并停止当前服务!!! 3.cdh01的hadoop组件起不来,原因是一些文件夹的权限问题,更改权限并且更改拥有者及组(参照其他服务器) 4.内存不足主要因为NodeManager内存调的太高,调小即可(个人经验,5台机器可用内存和为30*4+20=160G,可同时对20G的数据做处理,感觉够用了) 5.oozie报错:Failed to install Oozie ShareLib,这个问题是cdh6.2的通病,只要安装oozie就会 出现(无论是升级,还是新装。 解决: cd /opt/cloudera/parcels/CDH/lib/oozie/libtools ln -s ../../../jars/logredactor-2.0.7.jar logredactor-2.0.7.jar 执行完后重启oozie。 6.oozie端口号11000冲突,改为11002 7.从节点不要提前安装agent服务!!!直接在web界面安装! 8.把CM和CDH装好后面就轻松多了 9.==主机名不要出现下划线!==

2024年6月8日 · 1 分钟

hadoop默认端口

端口 用途 9000 fs.defaultFS,如:hdfs://172.25.40.171:9000 9001 dfs.namenode.rpc-address,DataNode会连接这个端口 50070 dfs.namenode.http-address 50470 dfs.namenode.https-address 50100 dfs.namenode.backup.address 50105 dfs.namenode.backup.http-address 50090 dfs.namenode.secondary.http-address,如:172.25.39.166:50090 50091 dfs.namenode.secondary.https-address,如:172.25.39.166:50091 50020 dfs.datanode.ipc.address 50075 dfs.datanode.http.address 50475 dfs.datanode.https.address 50010 dfs.datanode.address,DataNode的数据传输端口 8480 dfs.journalnode.rpc-address 8481 dfs.journalnode.https-address 8032 yarn.resourcemanager.address 8088 yarn.resourcemanager.webapp.address,YARN的http端口 8090 yarn.resourcemanager.webapp.https.address 8030 yarn.resourcemanager.scheduler.address 8031 yarn.resourcemanager.resource-tracker.address 8033 yarn.resourcemanager.admin.address 8042 yarn.nodemanager.webapp.address 8040 yarn.nodemanager.localizer.address 8188 yarn.timeline-service.webapp.address 10020 mapreduce.jobhistory.address 19888 mapreduce.jobhistory.webapp.address 2888 ZooKeeper,如果是Leader,用来监听Follower的连接 3888 ZooKeeper,用于Leader选举 2181 ZooKeeper,用来监听客户端的连接 60010 hbase.master.info.port,HMaster的http端口 60000 hbase.master.port,HMaster的RPC端口 60030 hbase.regionserver.info.port,HRegionServer的http端口 60020 hbase.regionserver.port,HRegionServer的RPC端口 8080 hbase.rest.port,HBase REST server的端口 10000 hive.server2.thrift.port 9083 hive.metastore.uris

2022年7月10日 · 1 分钟

CDH组件参数调优

1.YARN参数调优 检查项 当前值 修改值 JobHistory Server 的 Java 堆栈大小 1GB 2GB NodeManager 的 Java 堆栈大小 1GB 2GB ResourceManager 的 Java 堆栈大小 1GB 2GB 容器内存 yarn.nodemanager.resource.memory-mb 24GB 32GB 最小容器内存 yarn.scheduler.minimum-allocation-mb 10GB 8GB 最大容器内存 yarn.scheduler.maximum-allocation-mb 40GB 56GB Map 任务内存 mapreduce.map.memory.mb 0M 12GB Reduce 任务内存 mapreduce.reduce.memory.mb 0M 24GB Application Master容器内存 yarn.app.mapreduce.am.resource.mb 24GB 32GB Map 任务 Java 选项库 mapreduce.map.java.opts -Djava.net.preferIPv4Stack=true -Dmapreduce.map.java.opts=-Xmx2048m Reduce 任务 Java 选项库 mapreduce.reduce.java.opts -Djava.net.preferIPv4Stack=true -Dmapreduce.reduce.java.opts=-Xmx2048m yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler yarn.scheduler.capacity.root.queues: 当前值: <configuration> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default</value> </property> <property> <name>yarn.scheduler.capacity.root.capacity</name> <value>100</value> </property> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>100</value> </property> </configuration> 修改值: ...

2022年5月29日 · 2 分钟

CDH角色划分

1. 服务器配置 主节点: hostname: m1,m2,m3 vcore:48 内存:128G SSD:1T(不算系统盘) 工作节点: hostname: n1,n2,n3,n4 vcore : 48 内存:256G SSD:1T(不算系统盘) 2. 节点职责描述 m1: 控制核心;cdh核心,hadoop主节点 m2: 网关入口;主节点高可用,一些组件的web ui,用户入口 ,(前期做计算任务的driver端,后期优化driver打散到各节点) m3: 后台服务;组件元数据库,任务的history服务 ,(后期做元数据HA) n1~n4: 算存一体;提供存储,计算等服务 3.角色分配策略 一、hdfs NameNode一般在主节点上,初始化安装的时候没有高可用,所以有SecondaryNameNode的作为一个备份,NameNode它会将它拆分后进行分布式存储,其中的数据是分散在各个DataNode节点,且默认都会有3个副本,防止其中一台机器宕机使得数据缺失。balancer一般与namenode搭建在一起。 二、hive hive metastore server与hiveServer2一般搭载一起上,但也可以分开,因为hive服务需要启动hiveServer2,访问sparksql需要启动metastore而hive gateway,事实上并不是真正的角色,也没有状态,但它们充当了告诉客户端配置应该放置在哪里。 添加Hive服务时,默认情况下会创建Hive网关。 三、cloudera manager server 这个可以根据实际搭建,这个相当于是集群的监听器,在网页上出现的的图表也就是这个监听器类似的,这个可以搭建在主节点上,但若是主节点上分配的角色过多会影响其服务器的性能。 四、spark 这个角色可以分配这任意的机器上,按实际情况调整。spark-gateway全部部署在各个机器上,这个对于个人理解来说相当于spark、spark2机器之间的通信功能。 五、yarn jobhistory与resourcemanager进行通信,所以部署上一般在同一台机器上放在主节点上,而nodemanager分配在各个节点上 六、zookeeper 这个若是机器足够一般是奇数的,所以部署在m节点上比较合适。奇数台、高可用、与管理角色共置 七、hue 会对外提供一个web ui,以便于数据分析和数据开发做即席查询。这个服务随意部署,根据自己的机器部署情况来看。 4.角色划分详情表 控制核心 网关+入口 元数据+历史服务 存算一体 m1 m2 m3 n1 n2 n3 n4 cloudera management Alert Publisher ✅ Event Server ✅ Host Monitor ✅ Service Monitor ✅ hdfs NameNode ✅ ✅ JournalNode ✅ ✅ ✅ Failover Controller ✅ ✅ HttpFs ✅ DataNode ✅ ✅ ✅ ✅ yarn ResourceManager ✅ ✅ NodeManager ✅ ✅ ✅ ✅ JobHistory Server ✅ hive Hive MetaStore Server ✅ HiveServer2 ✅ HiveGateway ✅ ✅ ✅ ✅ ✅ ✅ ✅ spark Spark History Server ✅ Spark Gateway ✅ ✅ ✅ ✅ ✅ ✅ ✅ impala Impala StateStore ✅ Impala catalog Server ✅ Impala Daemon ✅ ✅ ✅ ✅ zookeeper zk-node ✅ ✅ ✅ hue Hue Server ✅ Hue Load Balancer ✅ 5. 未来升级项 work节点扩展硬盘,只需将新盘挂载到新目录/hadoop/data2或/hadoop/data3,更新hdfs配置就能完成存储扩展(支持热加入) ...

2022年5月15日 · 1 分钟