Hadoop集群数据同步失败 报副本放置不足故障排查
故障根因
本次写入失败并非实际磁盘空间不足导致,核心是配置错误引发HDFS存储类型识别异常,具体问题点如下:
hdfs-site.xml存在非法XML语法错误:文件开头XML声明前多了1个冗余*字符,文件末尾</configuration>闭合标签后也多了1个冗余*字符,会导致配置加载时解析异常。- 配置项逻辑冲突:你在
dfs.datanode.data.dir中显式给数据目录标注了[DISK]存储类型,但同时将dfs.storage.policy.enabled设为false关闭了存储策略功能,NameNode无法识别DataNode上报的DISK类型存储,判定所有3个运行中的DataNode都没有符合块放置要求的存储介质,直接将所有节点排除在可选写入范围外,最终触发副本放置失败错误。
之前格式化NameNode、DataNode操作无效,是因为操作没有触及配置错误这个根本原因。
修复步骤
- 修正配置文件语法错误
编辑所有节点的hdfs-site.xml,删除文件开头、末尾的冗余*字符,保证XML格式完全合法。 - 解决配置冲突,二选一即可:
- 方案1(推荐,适配当前目录配置):将
dfs.storage.policy.enabled配置项的值从false改为true,开启存储策略功能,和目录上标注的[DISK]类型匹配。 - 方案2(不需要存储策略功能时选择):删除
dfs.datanode.data.dir配置值里的[DISK]前缀,直接写为file:///opt/hadoop/dfsdata/dataNode,HDFS默认会将本地数据目录识别为DISK类型存储,不需要显式标注。
- 方案1(推荐,适配当前目录配置):将
- 同步配置
将修正后的hdfs-site.xml文件同步到集群所有节点的Hadoop配置目录,覆盖原有错误配置,确保所有节点配置完全一致。 - 重启集群生效
依次执行以下命令:
# 停止HDFS服务 stop-dfs.sh # 执行jps命令检查所有节点进程,确认NameNode、DataNode进程全部退出,残留进程手动kill jps # 启动HDFS服务 start-dfs.sh
- 功能验证
集群启动完成后,先执行hdfs dfsadmin -report确认所有DataNode存储状态正常,再上传一个小测试文件到HDFS验证写入功能正常,之后即可正常传输18GB业务数据。
内容的提问来源于stack exchange,提问作者vu manh
相关产品推荐
相关产品推荐

