我现在正在建立一个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吗?
那么,有什么建议吗?
答案 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中具有不同的主机名。
它应该像这样工作。