远程hdfs访问上传数据:端口映射
环境:windows主机,已跟云服务器互通。云服务器(其中公网IP一个,内网IP五个)
需求:需要上传若干GB级文件到云服务器上的hdfs存储。
问题:hdfs WebUI,可以正常访问,上传、删除文件夹,删除文件,但是不能上传文件。
报错提示
文件上传不了,woker3
是我的内网节点名字,通过开发者模式在network模块可以进一步查看网络问题,发现是域名解析不成功,访问不了我的数据节点woker3
。
问题排查
集群运行状况:云服务器jps启动正常。
云服务器上传:在VNC登录云服务器,命令行可以正常上传local file。
防火墙:服务器没开,安全组的IP、端口做了限定设置;windows防火墙没有影响。
问题判断
hdfs通过9864端口访问,在浏览器中发现hdfs报错是域名,而不是IP地址(这些是内网IP无法外网访问)。
实际上namenode我绑定了公网IP可以访问,而我的剩下datanode是内网IP,它的9864端口无法完成到本地windows机器的端口映射。
解决方案
所以直接绑定个公网IP就行。
所以在服务器买了公网IP,绑定个woker1,然后在windows本地电脑上修改etc/host ,如下:
新买的公网IP:woker1
新买的公网IP:woker2
…
然后就可以了。
问题总结
文件上传问题:
权限配置问题或者数据节点的访问限制。
- 权限问题在hdfs-site.xml和core-site.xml文件中设置访问权限和验证权限。
- 数据传输权限,确保数据节点的访问限制正确配置,允许通过公网IP进行数据传输。
端口映射问题:
- 防火墙一方面,格挡了局域网或者公网IP访问。
- 网络设备的配置,数据节点的内网IP无法与公网访问。
EIP() Elastic IP Address) 通过EIP与公网通信。
端口映射:将内网中的host的port映射到外网主机的一个端口,提供服务。
其他解决方方法:hdfs-site.xml
域名映射,而不是IP映射。
修改、指定hostname可以避免直接连接到内网节点的IP地址。
hostname:是该主机的标签
dfs.client.use.datanode.hostname:决定client(客户端)当连接数据节点时是否使用datanode 的主机名字,这样可以通过域名访问,而不是通过IP访问。