通过 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、热点这种

第一种方法,解决方案

<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://192.168.43.18:9000</value></property>
</configuration>

第二种方法,解决方法

<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://hadoop01:9000</value></property>
</configuration>
vi /etc/hosts192.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 本地编程 看起来没什么关系了,但问题的本质是一样的(其实后面两个的解决方法的原理和原因我已经不知道了)

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

  1. 启动报错java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerable

    启动报错java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerab 原因 项目的配置文件有applicatio ...

  2. 在AS模拟器上访问本地电脑tomcat部署的资源报错java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8081

    前言 平时为了做些安卓测试,我也会写一下后端的东西.已经有好长一段时间没写过服务端相关的内容了,今天看着郭霖的<第一行代码>,我把一个xml资源部署到了tomcat服务器上,在浏览器上是可 ...

  3. Tomcat 报错 java.net.connectexception:拒绝连接 解决办法

    tomcat java.net.ConnectException: Connection refused 1,描述 在一次配置新工程项目,修改Tomcat server.xml后,执行shutdow. ...

  4. [Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out

    1.概述 Mac 编译es 6.8 报错 [lcc@lcc ~/IdeaProjects/source_code/elasticsearch]$ ./gradlew assemble Download ...

  5. [搞了一上午:已解决]Finalshell连接Linux报错java.net.ConnectException: Connection refused: connect

    这个问题直接困了一上午:(很大可能像我一样是卸载VMware没把注册表清理干净) 1.因为刚开始装的VMware是15的版本,然后电脑系统是win11,在打开虚拟机的时候,电脑就蓝屏重启,搞了一会之后 ...

  6. java 报错 定位,问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT...

    用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: User ...

  7. hadoop报错 java home_hadoop的常见报错日志以及解决方案

    1. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using built ...

  8. flink SQL报错java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLj

    问题 flink SQL连接hive以及hudi 报错java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkAr ...

  9. DRP问题集结(一)-Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory...

    问题一:  Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 问题二:[Error]Jav ...

最新文章

  1. 从数百个Excel中查找数据,一分钟用Python搞定
  2. nginx 负载均衡配置_LINUX系统nginx负载均衡配置
  3. snmp验证方式总结
  4. Gitlab上传代码
  5. 扫地机器人测评云鲸_云鲸科技,J1测评
  6. 深入理解Linux内核链表
  7. html中图片响应式怎么写,如何使用 HTML5 的picture元素处理响应式图片
  8. NumPy Essentials 带注释源码 四、NumPy 核心和模块
  9. Markdown生成左边框目录
  10. tcp/ip网络协议学习
  11. 库仑计DS2781通信失败
  12. 论文翻译(上):Deep Learning Based Semantic Labelling of 3D Point Cloud in Visual SLAM
  13. 清华计算机系分数线2018四川,四川多少分能上清华?附清华大学在四川的录取分数线...
  14. 飞猪 Serverless 体系从无到有,落地10余个业务场景
  15. html required 无效,html5的input的required使用中遇到的问题及解决方法
  16. 【Flask项目】项目准备之-容联云短信服务平台使用—发送短信、Flask-limiter限流
  17. 笔记(待续)-动力学逆问题相关基础知识
  18. 【51NOD 1585】买邮票送邮票
  19. 深度解析:面试官问你项目经验到底能问多细?(附实战项目)
  20. Could not find a version that satisfies the requirement pylab No matching distribution found for pyl

热门文章

  1. 原生js+css 实现轮播图 完整代码
  2. 【设计模式】之外观(Facade)模式
  3. 我是这样入门“机器学习”的
  4. python爬取上证股票的历史记录并画历史收盘图曲线
  5. 推荐:几款优秀的数据挖掘工具
  6. 漫步数理统计三十——依概率收敛
  7. PADS-电阻、电容、电感PCB封装
  8. GPL LGPL M.
  9. 【opencv】 使用at和ptr指针访问像素的区别
  10. 关于无符号整数的加法