Apache Hadoop 3.3.6数据加载失败:副本写入异常求助
针对你遇到的could only be written to 0 of the 1 minReplication nodes. There are 1 datanode(s) running and 1 node(s) are excluded错误,以下是针对性排查和解决步骤:
检查DataNode排除列表
执行命令查看当前被NameNode排除的节点:hdfs dfsadmin -getExcludedNodes如果输出包含你的DataNode节点,先修改
hdfs-site.xml中的dfs.hosts.exclude配置文件,移除该节点,然后刷新NameNode节点列表:hdfs dfsadmin -refreshNodes同时执行
hdfs dfsadmin -report确认该DN的状态是否为In Service。验证跨节点网络与RPC连通性
从提交作业的节点,测试到DataNode节点的HDFS端口连通性(Hadoop 3.x默认数据传输端口为9866,RPC端口为8020):nc -zv <datanode-hostname> 9866 nc -zv <datanode-hostname> 8020若连通失败,检查RHEL 8.6的防火墙规则(
firewall-cmd --list-all),确保Hadoop相关端口已开放,或者临时关闭防火墙测试。同时查看DataNode日志($HADOOP_HOME/logs/hadoop-datanode-*.log),确认是否存在RPC连接拒绝、认证失败等报错。排查存储策略与节点标签限制
检查目标路径的存储策略是否绑定了特定节点标签:hdfs storagepolicies -getStoragePolicy -path /user/mapred/huawei/mhr_sms_mt_bill_home_routed/date_hour=2023-11-21-07若存在标签限制,确认DataNode是否配置了对应标签;执行
hdfs dfsadmin -printTopology查看节点标签信息,必要时调整存储策略或给DataNode添加对应标签。确认LZO压缩环境一致性
因为写入的是LZO格式文件,需确保:- 提交作业的节点和DataNode节点都安装了相同版本的LZO压缩库(如
lzo-devel、hadoop-lzo) core-site.xml中已配置LZO编解码器:<property> <name>io.compression.codecs</name> <value>com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value> </property> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property>
重启相关服务后重新测试作业。
- 提交作业的节点和DataNode节点都安装了相同版本的LZO压缩库(如
检查DataNode健康状态细节
查看DataNode日志,重点排查:- 存储目录权限:确认HDFS存储目录(
dfs.datanode.data.dir配置的路径)所属用户为Hadoop运行用户,权限为755 - 磁盘健康:执行
df -h确认磁盘未挂载只读,dmesg查看是否有磁盘IO错误 - 资源瓶颈:
top查看CPU、内存占用情况,避免因资源耗尽导致DN被标记为不健康
- 存储目录权限:确认HDFS存储目录(
内容的提问来源于stack exchange,提问作者user3051956

