我在一台IP为192.168.1.109的计算机上成功安装并运行Hadoop(实际上它实际上是在虚拟机上运行的Ubuntu实例)。键入jps时显示
2473 DataNode
2765 TaskTracker
3373 Jps
2361 NameNode
2588 SecondaryNameNode
2655 JobTracker
这应该意味着hadoop正在运行。像./hadoop fs -ls这样的运行命令很好,可以产生预期的结果。
但是,如果我尝试通过编写Java代码的HDFS API来连接它从我的IP为192.168.1.80的Windows框连接它,如下所示:
配置conf = new Configuration();
FileSystem hdfs = null;
路径filenamePath =新路径(FILE_NAME);
hdfs = FileSystem.get(conf); < - 问题发生在这条线上
当我运行代码时,错误显示如下:
11/12/07 20:37:24 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了0次。
11/12/07 20:37:26 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了1次。
11/12/07 20:37:28 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了2次。
11/12/07 20:37:30 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了3次。
11/12/07 20:37:32 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了4次。
11/12/07 20:37:33 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了5次。
11/12/07 20:37:35 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了6次。
11/12/07 20:37:37 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了7次。
11/12/07 20:37:39 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了8次。
11/12/07 20:37:41 INFO ipc.Client:重试连接服务器:/192.168.1.109:9000。已经尝试了9次。
java.net.ConnectException:在连接异常时调用/192.168.1.109:9000失败:java.net.ConnectException:连接被拒绝:无更多信息
为了确定套接字是否已经打开并等待hadoop serer上的传入连接,我在ubuntu框上netstat,结果显示如下:
tcp 0 0 localhost:51201:LISTEN 2765 / java tcp 0 0 *:50020:LISTEN 2473 / java tcp 0 0 localhost:9000:LISTEN 2361 / java tcp 0 0 localhost:9001:LISTEN 2655 / java tcp 0 0 *:mysql:LISTEN - tcp 0 0 *:50090:LISTEN 2588 / java tcp 0 0 *:11211:LISTEN - tcp 0 0 *:40843:LISTEN 2473 / java tcp 0 0 *:58699:LISTEN - tcp 0 0 *:50060:LISTEN 2765 / java tcp 0 0 *:50030:LISTEN 2655 / java tcp 0 0 *:53966:LISTEN 2655 / java tcp 0 0 *:www:LISTEN - tcp 0 0 *:epmd:LISTEN - tcp 0 0 *:55826:LISTEN 2588 / java tcp 0 0 *:ftp:LISTEN - tcp 0 0 *:50070:LISTEN 2361 / java tcp 0 0 *:52822:LISTEN 2361 / java tcp 0 0 *:ssh:LISTEN - tcp 0 0 *:55672:LISTEN - tcp 0 0 *:50010:LISTEN 2473 / java tcp 0 0 *:50075:LISTEN 2473 / java
我注意到,如果本地地址列类似于localhost:9000(以localhost:not * :)开头,在某些情况下,它将无法从远程主机连接,甚至无法在自己的盒子中连接。我试过telnet localhost 9000它工作,我的意思是它可以连接到端口,但如果我使用telnet 192.168.1.109 9000错误显示像
$ telnet 192.168.1.109 9000尝试192.168.1.109 ... telnet:无法连接到远程主机:连接被拒绝
我花了差不多一个星期来解决我现在真的很累的问题,我希望有人可以帮助我。
注意:我不确定namenode是否默认拒绝远程连接。我是否需要更改某些设置才能允许远程连接?
对于客户端和NameNode,从fs.default.name
in core-site.xml将hdfs://106.77.211.187:9000
的值更改为hdfs://localhost:9000
。将IP地址替换为运行NameNode的节点的IP地址或主机名。
是能够telnet 106.77.211.187 9000
,这里是netstat -a | grep 9000
的输出
tcp6 0 0 106.77.211.187:9000 [::]:* LISTEN tcp6 0 0 106.77.211.187:50753 106.77.211.187%819:9000已建立 tcp6 0 0 106.77.211.187:9000 106.77.211.187%81:50753已建立
至于原因,源代码如下所示,fs.default.name设置为localhost
ServerSocket socket = new ServerSocket(9000); socket.bind(本地主机);
由于绑定地址已分配给localhost,因此namenode进程只能接受来自localhost的连接。如果将绑定地址分配给计算机名称或IP地址的名称,则namenode进程可以接受来自远程计算机的任何连接。
我在所有配置文件中用其IP地址替换了所有localhost,现在它正常工作。
检查/etc/hosts
文件并确保您具有与节点的完全限定名称(FQN)关联的IP。例:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.11 node1.mydomain.com node1
192.168.100.12 node2.mydomain.com node2
在我的情况下,我有线127.0.0.1 node1.mydomain.com
这是绝对错误的。
我遇到了同样的问题但是能够通过以下方式解决问题。我有hadoop master和slave作为CentOS7 VirtualBox虚拟机,我无法通过使用主节点的IP地址和端口从Windows主机访问Web GUI。确保按照下面给出的步骤进行修复;
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.10.2.20 hdp-master1.hadoop.cluster hdp-master1 172.10.2.21 hdp-slave1.hadoop.cluster hdp-slave1 172.10.2.22 hdp-slave2.hadoop.cluster hdp-slave2
0.0.0.0:9870
运行<property> <name>dfs.namenode.http-address</name> <value>hdp-master1.hadoop.cluster:9870</value> </property>
0.0.0.0:8088
运行<property> <name>yarn.resourcemanager.webapp.address</name> <value>hdp-master1.hadoop.cluster:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address</name> <value>hdp-master1.hadoop.cluster:8090</value> </property>
hdfs namenode -format
netstat -tulnp
并确保基于ip运行Web端口
netstat -tulnp
tcp 0 0 172.16.3.20:8088 0.0.0.0:* LISTEN 14651/java
tcp 0 0 172.16.3.20:9870 0.0.0.0:* LISTEN 14167/java
Check status ------------ systemctl status firewalld Stop Firewall ------------- systemctl stop firewalld Disable from Startup -------------------- systemclt disable firewalld
现在,您应该可以通过Web浏览器从Windows主机访问。我有条目添加到Windows主机文件,所以甚至以下工作
http://hdp-master1.hadoop.cluster:9870 http://hdp-master1.hadoop.cluster:8088
希望这可以帮助