/ etc / hosts文件如何影响datanode和namenode之间的连接?

时间:2014-01-13 09:27:35

标签: hadoop ip hostname

我现在正在建立一个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?

1 个答案:

答案 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,从而监听所有接口。