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开始,需要防火墙开放的端口
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐