我现在正在建立一个hadoop集群(4台机器,包括1台运行namenode和jobtracker的master,3台运行datanode和tasktraker的slave) 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只是主机名。我终于找到了reason:from the 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/用于从主机名Map到ip地址,所以,我的问题是,/etc/hosts如何影响hadoop主机的侦听ip而不使用任何主机名?
1条答案
按热度按时间iyzzxitl1#
有点猜测。。。好吧,很多猜测。。。
首先,在解析/etc/hosts时,会创建一个ip到主机名的Map,每个条目都会覆盖前面的条目。因此,在第一个配置中,192.168.10.10Map到“mongodb”,而在第二个配置中,它Map到“localhost”。稍后通过这个“向前”Map来创建“向后”Map,瞧,“localhost”根据两行的顺序解析为127.0.0.1或192.160.10.10。
其次,服务器绑定到“localhost:9000". 因为在配置中没有指定,所以它必须在代码中。
最简单的方法是添加到服务器配置中,使其绑定到0.0.0.0:9000,从而侦听所有接口。