java操作Hadoop的时候:Call From localhost/127.0.0.1 to ubuntu-linux:9000 failed on connection exception
连接拒绝
当指定地址有一台机器,但客户端使用的特定TCP端口上没有程序监听时,您将获得ConnectionRefused异常-并且没有防火墙阻止静默删除TCP连接请求。如果您不知道什么是TCP连接请求,请查阅规范。
除非两端存在配置错误,否则常见的原因是Hadoop服务没有运行。
当集群关闭时,这种堆栈跟踪非常常见——因为此时Hadoop服务正在集群被拆掉,对于那些自己没有关闭的服务和应用程序来说,这是可见的。在集群关闭期间看到此错误消息并不担心。
如果应用程序或集群不起作用,并且此消息出现在日志中,则情况更严重。
异常文本同时声明主机名和连接失败的端口。端口可用于识别服务。例如,端口9000是HDFS端口。咨询安巴里端口参考和/或Hadoop管理工具供应商的参考。
- 检查客户端使用的主机名是否正确。如果在Hadoop配置选项中:仔细检查它,尝试手动ping。
- 检查客户端试图交谈的IP地址是否正确。
- 确保异常中的目标地址不是0.0.0.0 - 这意味着您实际上没有为该服务配置客户端的真实地址,而是它正在接收服务器端属性,告诉它在每个端口上监听连接。
- 如果错误消息显示远程服务在“127.0.0.1”或“本地主机”上,则表示配置文件告诉客户端该服务在本地服务器上。如果您的客户端试图与远程系统对话,则您的配置将中断。
- Check that there isn't an entry for your hostname mapped to 127.0.0.1 or 127.0.1.1 in
/etc/hosts
(Ubuntu is notorious for this).- 检查客户端试图使用服务器提供服务的匹配项与之对话的端口。
netstat
命令在那里非常有用。- 在服务器上,尝试一个
telnet localhost <port>
,看看端口是否在那里打开。- 在客户端上,尝试
telnet <server> <port>
,查看该端口是否可以远程访问。- 尝试从其他机器连接到服务器/端口,看看它是否只是单个客户端行为不端。
- 如果您的客户端和服务器位于不同的子域,那么服务的配置可能只是发布基本主机名,而不是完全合格的域名。不同子域中的客户端可能会无意中尝试绑定到本地子域中的主机,但失败了。
- 如果您使用的是基于Hadoop的第三方产品,-请使用供应商提供的支持渠道。
- 请不要提交与您的问题相关的错误报告,因为它们将作为无效关闭
以上是官网提供的处理方案
我遇到的坑:
假如在core-site.xml配置文件里配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>ssss</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://laoniu-ubuntu:9000</value>
</property>
</configuration>
其中主机名:laoniu-ubuntu 虚拟机ip是:10.211.55.13
必须要在/etc/hosts 里加入一行解析: 10.211.55.13 laoniu-ubuntu