HDFS写入报错NO_REQUIRED_STORAGE_TYPE=1,请求技术支援
解决HDFS写入错误:Not enough replicas was chosen. Reason: {NO_REQUIRED_STORAGE_TYPE=1}
核心症状
- 写入HDFS时触发错误:
writing to hdfs error: Not enough replicas was chosen. Reason: {NO_REQUIRED_STORAGE_TYPE=1} - 存储策略设为
ALL_SSD时,NameNode日志反复报错直至崩溃;切换ONE_SSD、HOT、COLD策略均无效 - PySpark写入Parquet时,部分分区文件成功,部分触发该错误
- 集群存储全为SSD组成的LVM,
/hdfs为数据目录,已通过lsblk和lsblk -d -n -o name,rota确认介质类型 - DataNode端口正常,NameNode Web UI显示DataNode状态正常
排查与修复步骤
1. 强制DataNode识别SSD存储类型
HDFS依赖DataNode自动上报存储介质类型,LVM卷可能导致识别失效,需手动指定:
- 修改
hdfs-site.xml中dfs.datanode.data.dir配置,添加[SSD]前缀标记存储类型:<property> <name>dfs.datanode.data.dir</name> <value>[SSD]/hdfs</value> </property> - 重启所有DataNode,执行以下命令验证存储类型:
确认输出中每个DataNode的hdfs dfsadmin -reportStorage Type字段显示为SSD
2. 对齐存储策略与副本数配置
- 检查目标目录的存储策略:
hdfs storagepolicies -get /your/target/dir - 若使用
ALL_SSD策略,需确保集群中SSD节点数量≥副本数(默认副本数为3,单节点集群需将dfs.replication改为1) - 临时测试可切换为默认策略:
hdfs storagepolicies -setStoragePolicy -path /your/target/dir -policy DEFAULT
3. 修复NameNode元数据一致性
反复报错导致NameNode崩溃,可能是存储策略元数据损坏:
- 停止NameNode,备份元数据目录(对应
dfs.namenode.name.dir配置路径) - 执行元数据检查与修复:
hdfs namenode -checkpoint hdfs namenode -verify - 若损坏严重,尝试启动NameNode时添加
-recover参数修复:hdfs namenode -recover
4. PySpark写入场景排查
- 检查Spark作业配置,确认未强制设置错误的存储策略参数(如
spark.hadoop.dfs.storage.policy.enabled) - 尝试单分区写入测试,排除多分区并发写入导致的副本分配冲突
内容的提问来源于stack exchange,提问作者mehran
相关产品推荐
相关产品推荐

