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 分钟

PostgreSQL同步HDFS

1.使用datax同步数据 2.模板json(已配置hdfs ha): { "job": { "content": [ { "reader": { "name": "postgresqlreader", "parameter": { "username": "hs_sync", "password": "Pass2025", "column": [ "order_date", "day", "iso_day_of_week", "weekday_cn", "weekday_en", "weekday_short", "is_weekend", "iso_week", "month", "month_cn", "month_en_full", "month_en_short", "quarter", "year" ], "connection": [ { "table": [ "dim_calendar" ], "jdbcUrl": [ "jdbc:postgresql://100.64.0.10:25432/hs_sync_data" ] } ], "fetchSize": 1000 } }, "writer": { "name": "hdfswriter", "parameter": { "defaultFS": "hdfs://nameservice1", "hadoopConfig": { "dfs.nameservices": "nameservice1", "dfs.ha.namenodes.nameservice1": "nn1,nn2", "dfs.namenode.rpc-address.nameservice1.nn1": "192.168.33.61:8020", "dfs.namenode.rpc-address.nameservice1.nn2": "192.168.33.62:8020", "dfs.client.failover.proxy.provider.nameservice1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider" }, "fileType": "orc", "path": "/tmp/data/test/", "fileName": "dim_calendar", "writeMode": "truncate", "column": [ { "name": "order_date", "type": "date" }, { "name": "day", "type": "smallint" }, { "name": "iso_day_of_week", "type": "smallint" }, { "name": "weekday_cn", "type": "string" }, { "name": "weekday_en", "type": "string" }, { "name": "weekday_short", "type": "string" }, { "name": "is_weekend", "type": "boolean" }, { "name": "iso_week", "type": "smallint" }, { "name": "month", "type": "smallint" }, { "name": "month_cn", "type": "string" }, { "name": "month_en_full", "type": "string" }, { "name": "month_en_short", "type": "string" }, { "name": "quarter", "type": "string" }, { "name": "year", "type": "smallint" } ], "fieldDelimiter": "\t", "maxFileSize": 134217728, "encoding": "UTF-8" } } } ], "setting": { "speed": { "channel": 5 }, "errorLimit": { "record": 0, "percentage": 0.02 }, "retry": { "limit": 3, "interval": 5000 } } } }

2026年2月12日 · 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 分钟

linux系统级优化

一、在cdh+cm部署时,已经做了部分系统优化 ssh双向免密 配置时间同步服务(本次没用ntpd,用的是chrony) 禁用透明大页、碎片整理:THP (Transparent Huge Pages) 禁用内存交换swap(常用0或1) 二、hadoop集群推荐内核参数: 参数名称 默认值 说明 文件系统参数 fs.file-max 6815744 系统最大文件描述符数量(所有进程可打开文件总数上限) fs.aio-max-nr 1048576 异步I/O请求的最大并发数(影响高并发场景性能) 网络核心参数 net.core.rmem_default 262144 TCP接收缓冲区默认大小(256KB) net.core.wmem_default 262144 TCP发送缓冲区默认大小(256KB) net.core.rmem_max 16777216 TCP接收缓冲区最大允许值(16MB) net.core.wmem_max 16777216 TCP发送缓冲区最大允许值(16MB) TCP协议栈参数 net.ipv4.tcp_rmem 4096 262144 16777216 接收窗口尺寸:• 最小值4KB• 默认值256KB• 最大值16MB net.ipv4.tcp_wmem 4096 262144 16777216 发送窗口尺寸:• 最小值4KB• 默认值256KB• 最大值16MB 查看当前内核配置: sysctl -e fs.file-max fs.aio-max-nr \ net.core.rmem_default net.core.wmem_default \ net.core.rmem_max net.core.wmem_max \ net.ipv4.tcp_rmem net.ipv4.tcp_wmem 2>/dev/nulll ...

2026年1月31日 · 1 分钟

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 分钟

spark参数num-executors未生效

问题: spark-submit --master yarn --conf spark.default.parallelism=100 \ --deploy-mode cluster --driver-memory 4G --executor-memory 4G \ --num-executors 40 --executor-cores 2 \ --conf spark.yarn.executor.memoryOverhead=5g \ --class com.lz.hbase.CompanyInfo /tmp/test_langzi/original-spark_hbase01-1.0-SNAPSHOT.jar 以上提交参数中的–num-executors 40没有生效,executors 大于40并且占满yarn资源,导致后来的yarn任务阻塞 原因: 官方参数解释 –num-executors NUM Number of executors to launch (Default: 2). If dynamic allocation is enabled, the initial number of executors will be at least NUM. 当开启动态分配时,num-executors成为了最小executors 数,而cdh中spark默认开启dynamic allocation,所以当yarn队列资源空闲时,真正的excutor数会大于设置的num-executors 解决方案: 提交参数添加--conf spark.dynamicAllocation.maxExecutors=40 限制最大excutor数 附:spark提交任务模板 spark-submit --master yarn --conf spark.default.parallelism=100 \ --conf spark.dynamicAllocation.maxExecutors=40\ --deploy-mode cluster --driver-memory 4G --executor-memory 4G \ --num-executors 40 --executor-cores 3 \ --conf spark.yarn.executor.memoryOverhead=4G \ --class com.lz.hbase.CompanyInfo /tmp/test_langzi/original-spark_hbase01-1.0-SNAPSHOT.jar

2024年11月23日 · 1 分钟

maven打包去除dependency-reduced-pom.xml文件

标签 #maven 场景 工作 时间 2023年2月14日17:58:09 一、问题描述 每次打包的时候,项目目录会多出一个莫名的文件dependency-reduced-pom.xml 二、导致原因 maven打包插件maven-shade-plugin打包时自动生成,createDependencyReducedPom默认为true。 dependency-reduced-pom.xml 删除了已经在你的着色 jar 中的传递依赖项。这可以防止消费者两次拉他们,从而避免无用的重复。 三、解决方案 添加以下配置 <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> 如: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.1</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <exclude>org.slf4j:*</exclude> <exclude>log4j:*</exclude> <exclude>ch.qos.logback:*</exclude> <exclude>com.google.code.findbugs:jsr305</exclude> </excludes> </artifactSet> <filters> <filter> <!-- Do not copy the signatures in the META-INF folder. Otherwise, this might cause SecurityExceptions when using the JAR. --> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- Replace this with the main class of your job --> <mainClass>my.programs.main.clazz</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> </configuration> </execution> </executions> </plugin>

2024年11月9日 · 1 分钟

kafka集群运行节点运行不成功

1.现象 由于zookeeper挂掉,造成kafka出现:There are 60 offline partitions。 2.造成的原因 经过排查发现,由于kafka之前Topic在zookeeper中的数据还在,再重新建立会产生冲突导致失败。 3.解决方案 进入Zookeeper中将之前的脏数据删掉再重启kafka。 #1.进入zookeeper sh /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/zookeeper/bin/zkCli.sh #2.删除掉脏数据 deleteall /brokers/topics

2024年10月26日 · 1 分钟

hiveOnSpak客户端RemoteSparkDriver超时

1.现象 2.原因 集群资源使用率过高时可能会导致Hive On Spark查询失败-查询超时。 从hive on spark的架构看出超时的位置: 3.解决 修改以下参数,重启集群 ### 其他可设置的参考参数 # 在Hive client和远程Spark driver通信过程中,随机生成密码的比特数。最好设置成8的倍数。 hive.spark.client.secret.bits # 远程Spark drive用于处理RPC事件所用的最大线程数,默认是8。 hive.spark.client.rpc.threads # Hive client和远程Spark driver通信最大的消息大小(单位:byte),默认是50MB。 hive.spark.client.rpc.max.size # 远程Spark driver的通道日志级别,必须是DEBUG, ERROR, INFO, TRACE, WARN中的一个。 hive.spark.client.channel.log.level # 用于身份验证的SASL机制的名称。 hive.spark.client.rpc.sasl.mechanisms #生产集群设置的相应参数: hive.spark.client.future.timeout=360s # Hive client请求Spark driver的超时时间,如果没有指定时间单位,默认就是秒。 hive.metastore.client.socket.timeout=360s # 客户端socket超时时间,默认20秒。 hive.spark.client.connect.timeout=360000ms # Spark driver连接Hive client的超时时间,如果没有指定时间单位,默认就是毫秒。 hive.spark.client.server.connect.timeout=360000ms # Hive client和远程Spark driver握手时的超时时间,这个会在两边都检查的,如果没有指定时间单位,默认就是毫秒。 hive.spark.job.monitor.timeout=180s # Job监控获取Spark作业状态的超时时间,如果没有指定时间单位,默认就是秒。

2024年10月12日 · 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 分钟