HDFS错误: File /XXX could only be replicated to 0 nodes instead of minReplication (=1). 解决方法

0.背景

  • 三台centos7的虚拟机进行了完全分布式模式的搭建 ,Hadoop版本2.7.1
  • 虚拟机 node1为NameNode
  • node2 为SecondNameNode和DataNode
  • node3 为 DataNode
  • 该项目是基于HDFS的网盘项目,有上传文件的需求

解决方法:关闭所有虚拟机的防火墙!或者打开DataNode主机的指定端口:50010、50020

systemctl stop firewalld.service

1. 报错

做文件上传时,前端上传文件报错,具体如下:

File /aaa/a.txt.COPYING could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and 2 node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1550)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3110)
……

用 hadoop fs -put 命令上传也报错
在这里插入图片描述
基本分析不是项目前后端代码的问题,考虑Hadoop本身问题。

2.解决

查询资料发现如果问题在Hadoop,可以有如下?

  1. DataNode未成功启动,这个可以在虚拟机里用jps命令查看是否有DataNode的进程

jps

在这里插入图片描述

  1. 可能是hdfs存储空间不够了,在虚拟机node1输入命令查看

hdfs dfsadmin -report

显然不是,我这里还有10多G的 Remaining
在这里插入图片描述
3. centOS7的防火墙问题,导致Hadoop集群通讯出现很多问题。我安装的时候并没有直接关闭firewall防火墙,而是放行了当时需要的几个端口,50070之类。

关闭所有虚拟机防火墙果然成功

systemctl stop firewalld.service

3.粗暴关闭有必要吗?

虽然是虚拟机里的集群,安全无所谓。但直接关闭防火墙太粗暴,还是放行端口优雅,我测试后发现把所有DataNode下放行如下端口即可,我的DataNode 是Node2 和 Node3。

  • firewall-cmd --zone=public --add-port=50010/tcp --permanent
  • firewall-cmd --zone=public --add-port=50020/tcp --permanent
  • firewall-cmd --zone=public --add-port=50075/tcp --permanent
  • firewall-cmd --reload
    (50075其实不是必须的)
    我的node1(NameNode)
    在这里插入图片描述
    我的node3(DataNode)
    在这里插入图片描述
    端口信息参考这里Hadoop3.0开始,需要防火墙开放的端口
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值