You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,执行以下命令验证存储类型:
    hdfs dfsadmin -report
    
    确认输出中每个DataNode的Storage 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崩溃,可能是存储策略元数据损坏:

  1. 停止NameNode,备份元数据目录(对应dfs.namenode.name.dir配置路径)
  2. 执行元数据检查与修复:
    hdfs namenode -checkpoint
    hdfs namenode -verify
    
  3. 若损坏严重,尝试启动NameNode时添加-recover参数修复:
    hdfs namenode -recover
    

4. PySpark写入场景排查

  • 检查Spark作业配置,确认未强制设置错误的存储策略参数(如spark.hadoop.dfs.storage.policy.enabled)
  • 尝试单分区写入测试,排除多分区并发写入导致的副本分配冲突

内容的提问来源于stack exchange,提问作者mehran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:50