Hadoop namenode 不监听外部 IP
Hadoop namenode does not listen outside IPs
我有一个由 3 台机器组成的简单 hadoop 集群。一个主人和两个奴隶。都是运行我下载的最新极简版CentOSthere.
我所有的机器都有相同的主机文件:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.101 master
192.168.56.102 slave1
192.168.56.103 slave2
core-site.xml文件配置如下:(namenode应该监听9000端口)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
当从 master 启动 hdfs 并检查 datanodes/slaves 的日志时 我注意到数据节点无法连接到 namenode。
Retrying connect to server: master/192.168.56.101:9000. Already tried 0 time(s).
进一步检查后,似乎只有当我尝试从名称节点本身连接到端口 9000 时才能访问它。
[root@HadoopMaster conf]# sudo netstat -tulpn | grep :9000
tcp6 0 0 192.168.56.101:9000 :::* LISTEN 11055/java
尝试 telnet master 9000
只能从主控主机成功。从站收到以下错误:
[root@Slave1 logs]# telnet master 9000
Trying 192.168.56.101...
telnet: connect to address 192.168.56.101: No route to host
但相反他们可以连接到端口 22 就好了
[root@Slave1 logs]# telnet master 22
Trying 192.168.56.101...
Connected to master.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1
所以这一定是一个 IP 绑定问题。
我到处都看过,找不到可行的答案。通过在 core-site.xml
文件中使用完全限定的域名解决了与我类似的问题,但我没有成功。
顺便说一下,我还禁用了 iptables,在此之前,我打开了所有主端口到从属 IP 的端口。没有成功。
如果你找到答案,我一定会送你一个美味的虚拟饼干;)
如果你是 运行 VM VirtualBox 的几个实例中的那些 VM,这看起来很自然,即使它们在同一网络上,它们也看不到对方。
勾选virtualbox manual to configure the network properly, you can also check this answer
我才发现CentOS默认的防火墙不是iptables而是firewalld。
正确配置此防火墙后,我设法解决了我的问题!
为什么安装了iptables却没有使用,这是个谜。
男孩,我非常喜欢 Debian 系列。
我有一个由 3 台机器组成的简单 hadoop 集群。一个主人和两个奴隶。都是运行我下载的最新极简版CentOSthere.
我所有的机器都有相同的主机文件:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.101 master
192.168.56.102 slave1
192.168.56.103 slave2
core-site.xml文件配置如下:(namenode应该监听9000端口)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
当从 master 启动 hdfs 并检查 datanodes/slaves 的日志时 我注意到数据节点无法连接到 namenode。
Retrying connect to server: master/192.168.56.101:9000. Already tried 0 time(s).
进一步检查后,似乎只有当我尝试从名称节点本身连接到端口 9000 时才能访问它。
[root@HadoopMaster conf]# sudo netstat -tulpn | grep :9000
tcp6 0 0 192.168.56.101:9000 :::* LISTEN 11055/java
尝试 telnet master 9000
只能从主控主机成功。从站收到以下错误:
[root@Slave1 logs]# telnet master 9000
Trying 192.168.56.101...
telnet: connect to address 192.168.56.101: No route to host
但相反他们可以连接到端口 22 就好了
[root@Slave1 logs]# telnet master 22
Trying 192.168.56.101...
Connected to master.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1
所以这一定是一个 IP 绑定问题。
我到处都看过,找不到可行的答案。通过在 core-site.xml
文件中使用完全限定的域名解决了与我类似的问题,但我没有成功。
顺便说一下,我还禁用了 iptables,在此之前,我打开了所有主端口到从属 IP 的端口。没有成功。
如果你找到答案,我一定会送你一个美味的虚拟饼干;)
如果你是 运行 VM VirtualBox 的几个实例中的那些 VM,这看起来很自然,即使它们在同一网络上,它们也看不到对方。
勾选virtualbox manual to configure the network properly, you can also check this answer
我才发现CentOS默认的防火墙不是iptables而是firewalld。 正确配置此防火墙后,我设法解决了我的问题!
为什么安装了iptables却没有使用,这是个谜。 男孩,我非常喜欢 Debian 系列。