我现在正在建立一个hadoop集群(4台机器,包括1个运行namenode和jobTracker的主机,3个运行dataNode和TaskTraker的从机)。但是,如果所有数据节点都无法连接到9000端口上的这个主机,那就太可怜了。我使用sudo netsat -ntlp
,结果是:
tcp 0 0 0.0.0.0:52193 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:39267 0.0.0.0:* LISTEN 7284/rpc.mountd
tcp 0 0 0.0.0.0:33219 0.0.0.0:* LISTEN 7284/rpc.mountd
tcp 0 0 0.0.0.0:41000 0.0.0.0:* LISTEN 1539/mongos
tcp6 0 0 :::50030 :::* LISTEN 604/java
tcp6 0 0 :::57134 :::* LISTEN 32646/java
tcp6 0 0 :::111 :::* LISTEN 13786/rpcbind
tcp6 0 0 :::57428 :::* LISTEN -
tcp6 0 0 :::57173 :::* LISTEN 7284/rpc.mountd
tcp6 0 0 :::50070 :::* LISTEN 32646/java
tcp6 0 0 :::5910 :::* LISTEN 2452/Xvnc
tcp6 0 0 :::22 :::* LISTEN 32473/sshd
tcp6 0 0 :::50744 :::* LISTEN 7284/rpc.mountd
tcp6 0 0 :::55036 :::* LISTEN 14031/rpc.statd
tcp6 0 0 :::42205 :::* LISTEN 7284/rpc.mountd
tcp6 0 0 :::44289 :::* LISTEN 504/java
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::38950 :::* LISTEN 604/java
tcp6 0 0 127.0.0.1:9000 :::* LISTEN 32646/java
tcp6 0 0 127.0.0.1:9001 :::* LISTEN 604/java
tcp6 0 0 :::50090 :::* LISTEN 504/java
我的/ etc / hosts是:
192.168.10.10 localhost
192.168.10.10 mongodb
127.0.0.1 localhost
#127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
mongodb只是主机名。最后我找出原因:从netstat的输出,这一行:
tcp6 0 0 127.0.0.1:9000 :::* LISTEN 32646/java
我们可以看到master只监听127.0.0.1:9000,因此它无法接收任何不是来自127.0.0.1的连接,因此任何datanode都无法通过端口9000连接到它。 所以,我更改了文件/ etc / hosts,只需切换第1行和第2行:
192.168.10.10 mongodb
192.168.10.10 localhost
127.0.0.1 localhost
#127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
我使用sudo netstat -ntlp
,结果已更改为
tcp6 0 0 192.168.10.10:9000 :::* LISTEN 32646/java
当然,数据节点可以通过9000连接到它。
我没有在hadoop配置文件中使用任何主机名,我使用的只是直接IP地址。我知道/ etc / hosts /用于从主机名映射到ip address ,所以,我的问题是,/ etc / hosts如何在不使用任何主机名的情况下影响hadoop master的监听ip?
答案 0 :(得分:0)
这里有一点猜测......好吧,很多的猜测......
首先,在解析/ etc / hosts时,会创建IP到主机名的映射,每个条目都会覆盖之前的任何条目。因此,在您的第一个配置中,192.168.10.10映射到“mongodb”,而在第二个配置中,它映射到“localhost”。稍后通过这个“前向”地图用于创建“向后”地图,瞧,“localhost”解析为127.0.0.1或192.160.10.10,具体取决于两行的顺序。
其次,您的服务器绑定到“localhost:9000”。由于您未在配置中指定它,因此它必须位于代码中。
最简单的方法是添加到服务器配置,使其绑定到0.0.0.0:9000,从而监听所有接口。