hdfs上传文件大小为零问题解决

来源:互联网 发布:seo公司哪家专业 编辑:程序博客网 时间:2024/06/05 18:52

问题描述:
搭建了一个Hadoop集群,1Master+2Slave。完成后从客户端上传文件,上传后,文件创建,但文件大小为0。Hadoop的log信息如下:
java.io.IOException: File /uploadResource/Resource_103/20170607162133115video.mp4 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.

问题解决:
baidu了错误信息,网上的答案是:
1、Datanode进程没启动
2、Datanode不可达

于是做了一系列的检查测试:
1、在Master和slave上执行
$jps
8468 NameNode
8727 SecondaryNameNode
8921 ResourceManager
7033 TSDMain
6079 Jps
6271 HMaster

flyrish@Aero-Hadoop-Slave-2:~$ jps
2788 NodeManager
6294 Jps
2198 ResourceManager
2023 SecondaryNameNode
2632 DataNode
进程都已启动,没有问题

2、检查LOG里启动信息,各节点启动正常,交与没有问题

3、在Master 服务器上put本地文件:
hapoop fs -put test /test
上传成功,文件大小正常

从上面信息分析,hadoop本身工作正常,客户端上传文件为0的问题 ,应该与网络环境有关。于是分别在Master和客户端上抓包分析,比较本地上传和客户端上传的流程。分析发现,上传文件的过程是:

  1. 客户端查询文件信息
  2. Namenode返回应答
  3. 文件不存在,客户端发create命令
  4. Namenode创建文件,并返回datanode节点的主机名
  5. 客户端发送文件到datanode
    并不是原来想像的一个流程搞定,对比报文,发现客户端访问datanode节点失败。原来没有想到datanode和客户端有交与,所以datanode的防火墙没有对客户端开放。另外,datanode的主机名没有在客户端的主机名表中,无法解析。
    于是,修改了两个slave的防火墙配置,将两个slave的主机名加到客户端主机名表中,再试,上传成功!
原创粉丝点击