HDFS | 在本地使用java api上传文件到阿里云ECS报错解决

在使用Java API上传文件到阿里云ECS上的HDFS时遇到报错。问题在于NameNode返回DataNode的私网IP导致本地无法访问。解决方案包括:1) 配置Hadoop XML文件,让NameNode返回DataNode主机名而非内网IP;2) 在阿里云ECS安全组中开放DataNode的端口;3) 更新本地Hosts文件以映射DataNode主机名。经过这些步骤,文件成功上传到HDFS。
摘要由CSDN通过智能技术生成

使用文件流上传文件报错

首先,确认报错信息。
在这里插入图片描述
之前在使用虚拟机搭建完全分布式的时候曾经测试过使用IO流上传文件到HDFS并且成功,而这次报错发生在我将hadoop集群换成了在阿里云的伪分布式集群后。

阿里云ECS基本信息

Ubuntu 18.04
123.57.x.x(公网)
172.17.51.183(私网)

阿里云ECS hosts文件
在这里插入图片描述

检查一下伪分布式下hadoop集群的配置信息

hdfs-site.xml
在这里插入图片描述
core-site.xml
在这里插入图片描述
shell命令正常执行,
jps显示NameNode,DataNode,SecondaryNameNode

解决

添加配置信息

文件夹和文件名都是存放在 NameNode 上的,本地可以通过公网访问 NameNode,所以创建文件夹和文件都可以,但是写数据的时候,NameNode 和DataNode 是通过内网通信的,NameNode 会返回给本地 DataNode 的内网 IP,本地就访问不了了。

所以在代码中添加下面配置信息,可以使得NameNode不返回DataNode的私网IP,取而代之返回的是DataNode的主机名。

//1.获取fs对象
Configuration conf = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值