栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

HDFS 本地编程报错java.net.ConnectException: Call From LAPTOP-LJF22VB3/192.168.56.1 to 192.168

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HDFS 本地编程报错java.net.ConnectException: Call From LAPTOP-LJF22VB3/192.168.56.1 to 192.168

通过 Hadoop 本机编程中关于虚拟机和本地主机通信的知识点

起因

本地主机编写相应的代码后运行发现报错,java.net.ConnectException: Call From LAPTOP-LJF22VB3/192.168.56.1 to 192.168,这是因为 Hadoop core-site.xml 其中的 fs.defaultFS 设置为 hdfs://localhost:9000,fs.defaultFS 配置错误,这是导致本机不能访问 Hadoop 9000 端口的根本原因

原因

上面将了根本原因,是因为 fs.defaultFS 配置为 localhost(127.0.0.1),这导致虚拟机上的 9000 端口只能由虚拟机访问,而本机在 IDEA 上调用时无法访问虚拟机的该端口,即使虚拟机的 ip 和本地主机是同一网段

此时本地主机是 192.168.43.1,而虚拟机的 ip 是 192.168.43.18,两台机子是同一网段

通过 netstat -tupnl 命令可以查看端口使用详情,下面有一张 Hadoop 运行时的网络图片

由上图可以看见 9000 端口只有虚拟机可以访问

另一种情况

虚拟机 IP 和本机处在同一网段但是仍然 Ping 不通

后面使用的时候又遇到连不上的情况,但是原因不同

注意看上图的 VMnet8,这是 VM 创建的虚拟网卡,Nat 模式下 VMnet8 的 IPV4 地址必须和虚拟机的 ip 在同一个网段(ifconfig 可以查看 ip),这里为了简便我把电脑 VMnet 8 的网段设置为静态的,默认就是 192.168.43.1,子网掩码是 255.255.255.0,这里虚拟机里的 IP 只要前三个数字一样就是同一网段(子网掩码和 IP 通过计算得出的,可以自己百度),具体设置如下(理论上来说 VM 里面也是可以配的)

注意,我这里 VMnet8 已经和虚拟机处在同一网段,都是 192.168.43,但是仍然无法通信,这里具体原因不知道是什么,但是解决方法还是有点,比较麻烦,在下面有讲

解决方法

其实解决方法已经很明显,只要让 9000 端口能让本地主机访问就行了,所以解决方法有两个

  1. core-site.xml,直接配置你当前的 IP,不放过需要注意的是你这个 IP 不能经常变,本地主机一旦换了个网络,IP 就会随机分配一个,所以这个方案,只适用与网络固定的时候,比如你的本地主机只用一条网线或者一台路由器
  2. /etc/hosts 修改,core-site.xml 设置一个你中意的名字,比如 hadoop01,然后在 hosts 文件中添加映射,也就是路由表中添加映射(涉及到一点点计网知识),这样 hadoop 在启动时就会去路由表里面找,并映射相应的 IP,这个时候你换个网络的时候修改一下 hosts 文件就又能访问到虚拟机里面的 9000 端口,正常的在本机进行 Hadoop 编程,core-site.xml 只需要配置一次,不需要再去修改 core-site.xml,并且重新启用,这个方法适合笔记本电脑,连 WIFI、热点这种

第一种方法,解决方案


    
        hadoop.tmp.dir
        file:/usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://192.168.43.18:9000
    

第二种方法,解决方法


    
        hadoop.tmp.dir
        file:/usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://hadoop01:9000
    

vi /etc/hosts

192.168.43.18   hadoop01
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost4 localhost4.localdomain4 

可以使用 curl 192.168.43.18:9000 或者 telnet 192.168.43.18 9000 测试本地主机是否能和虚拟机通信

另一种情况的解决方法

我使用的 VM

  1. VMware® Workstation 15 Pro
  2. 15.5.0 build-14665864

进到 VM -> 编辑 -> 虚拟网络编辑器 -> 更改设置 -> 还原默认设置


注意到还原默认设置的那一步,你的虚拟机 IP 会被重新随机分配一个 IP,记住这个 IP,待会需要改回来(不然需要重新配置 Hadoop 很麻烦)

改回来 IP 后重新 Ping 一下,说不定就能成功

终极解决方法

在尝试了上面的所有方法后,我的电脑每次重启后,再次连接虚拟机总是无法成功,无法 ping 通,但虚拟机 ping 本地主机是没有问题的,最后偶然间看到另一个博主的方法,比还原默认设置要更加快(还原默认设置至少需要3-5分钟),而这个博主的方法只需要 1 分钟左右,该博主的文章-主机重启后,主机无法PING通VMware的虚拟机,虚拟机可以PING通主机(妥协解决方案)

他的解决方案是禁用 VMnet8 然后再启用 VMnet8(就这么简单,但有用,而且虚拟机都不用重启)

总结

后面又更新了好几次,每次遇到新的问题找到新的解决方法又会更新,后面的更新和 HDFS 本地编程 看起来没什么关系了,但问题的本质是一样的(其实后面两个的解决方法的原理和原因我已经不知道了)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号