无法连接hadoop集群数据节点:所有节点具有相同的主机名是否正常?

时间:2014-01-13 04:53:53

标签: hadoop

我现在正在建立一个hadoop集群(4台机器,包括1个运行namenode和jobTracker的主机,3个运行dataNode和TaskTraker的从机)。但是所有数据节点都无法连接是很糟糕的。我运行{{1}在主机上,结果是:

sudo netstat -ntlp

来自我的3个数据节点机器的异常消息是相同的(当然它们有不同的ips): datanode 192.168.10.12的错误日志:

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 192.168.10.10:9000      :::*                    LISTEN      32646/java      
tcp6       0      0 192.168.10.10:9001      :::*                    LISTEN      604/java        
tcp6       0      0 :::50090                :::*                    LISTEN      504/java

那么,令我困惑的是,为什么每个datanode都试图连接到自己?例如,datanode 192.168.10.12的错误日志显示它正在尝试在端口9000上连接192.168.10.12,并且有在12上没有这样的监听端口。

我的所有群集节点都具有相同的主机名但不同的ips(主站:192.168.10.10从站:192.168.10.11,192.168.10.12,192.168.10.13),我的所有配置文件,包括2014-01-13 12:41:02,332 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered. 2014-01-13 12:41:02,334 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists! 2014-01-13 12:41:03,427 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: mongodb/192.168.10.12:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 2014-01-13 12:41:04,427 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: mongodb/192.168.10.12:9000. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 2014-01-13 12:41:05,428 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: mongodb/192.168.10.12:9000. Already tried 2 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 2014-01-13 12:41:06,428 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: mongodb/192.168.10.12:9000. Already tried 3 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) ,{{1 }和core-site.xml直接使用IP地址。我使用hdfs-site.xml,它显示所有计算机的防火墙都是mapred-site.xml

这4台机器的配置文件是相同的(当然ip是不同的):

芯-site.xml中

sudo ufw status

HDFS-site.xml中

**inactive**

mapred-site.xml中

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://192.168.10.12:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/hadoop/tmp</value>
    </property>
</configuration>
主人::

中的

/ etc / hosts

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
     <property>
            <name>dfs.replication</name>
                <value>3</value>
         </property>
         <property>
        <name>dfs.name.dir</name>
        <value>/var/hadoop/name</value>
    </property>
        <property>
        <name>dfs.data.dir</name>
        <value>/var/hadoop/data</value>
    </property>
</configuration>

在文件/ etc / hosts的第2行中,mongodb是集群的主机名,其他三个从服务器的主机名也是mongodb(因为这些机器用作mongodb集群)。

我强烈怀疑导致问题的是tcp6。那么,如何使用tcp网络而不是tcp6启动hadoop?

所以,我的问题是:

1.我的hadoop是在tcp6中启动而不是tcp ok?

2.所有群集机器都具有相同的主机名,但是hadoop可以使用不同的LAN ips吗?

那么,有什么建议吗?

2 个答案:

答案 0 :(得分:0)

两个不同的错误导致我的问题: 1:对于3个从属的每个core-site.xml文件the value of fs.default.name means the namenode's ip address,因此所有应该是master的ip地址,但我写的是每个slave的ip地址。因此,当我在主服务器中使用start-all.sh时,每个从服务器都尝试连接到自己的端口9000,而不是主服务器。因为从服务器作为datanode而不是namenode运行,所以连接被拒绝。

2:修改了3个从站的core-site.xml的ip地址后,虽然每个从站都试图连接到主站的端口9000,但仍然拒绝连接。我在主站上运行sudo netstat -ntlp ,它显示:

tcp6       0      0 127.0.0.1:9000      :::*                    LISTEN      32646/java 

这个127.0.0.1意味着它只是在9000上监听来自lcoalhost的连接,从外面9000上的所有连接都无法接收。所以问题转到文件/etc/hosts.My / ect / hosts文件如下:

192.168.10.12   localhost
192.168.10.12   mongodb
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

由于我在配置文件中使用ip地址,所以在这样的配置文件中,ip地址192.168.10.12将被转换为主机名localhost,并且我运行主机localhost,它显示:localhost has address 127.0.0.1。所以,这样的配置会导致hadoop只会收听127.0.0.1:9000。所以,我修改了这个文件(切换第1行和第2行):

    192.168.10.12   mongodb
    192.168.10.12   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

我重新启动hadoop和sudo netstat -ntlp,它显示:

tcp6       0      0 192.168.10.10:9000      :::*                    LISTEN      32646/java 

每件事都没问题。因为主人正在侦听其局域网IP地址,而不是只回环本地主机。

答案 1 :(得分:0)

您的core-site.xml必须具有namenode Ip地址,并且您的从属服务器必须在/ etc / hosts中具有不同的主机名。

它应该像这样工作。