我一直在尝试建立一个 Hadoop 集群;我设法让它以伪分布式模式运行,我的一台机器统计了托尔斯泰的战争与和平大约三十秒后。
我现在正尝试向集群添加第二台机器;为了帮助设置它,我创建了一个用户组 Hadoop,并赋予其在 Hadoop 服务器上启动、停止和运行作业的权限(尽管我将编辑配置文件的权限留给了 root 用户)。我确保 hadoop 组的所有成员都可以使用他们的公钥从主节点 ssh 到从节点。我使用 dpkg 安装了 hadoop 1.0.0.3。我在主节点和从节点上正确编辑了 masters 和 slaves 文件,并更改了配置以指向正确的 NameNode 和 JobTracker:
在 core-site.xml 中:
fs.default.name=hdfs://$MASTER:9000
在 mapred-site.xml 中:
mapred.job.tracker=$MASTER:9001
其中 $MASTER 是我的主机的主机名。
我的 NN、SNN 和 JobTracker 已正确启动;但是,我的从属节点无法连接到主节点!这是我在 DataNode 日志中看到的行为:
2012-05-25 09:36:23,390 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: $MASTER/10.23.95.197:9000. Already tried 0 time(s).
2012-05-25 09:36:23,390 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: $MASTER/10.23.95.197:9000. Already tried 1 time(s).
...
...
connect to server: $MASTER/10.23.95.197:9000. Already tried 9 time(s).
2012-05-25 09:36:31,394 INFO org.apache.hadoop.ipc.RPC: Server at $MASTER/10.23.95.197:9000 not available yet, Zzzzz...
一遍又一遍。我在 TaskTracker 日志中看到同样的内容,只是那里列出的端口号是 9001。lsof 告诉我正确的进程正在监听两个端口。出了什么问题???
$MASTER 的所有日志都可以在以下位置找到http://pastebin.com/ZzyKBQVJ
谢谢;如果您有任何问题,请告诉我。
答案1
此问题通常不是由 Hadoop 配置问题引起的,而更常见的是集群的网络配置问题;就我而言,它是由这个问题。如果您看到此行为,请/etc/hosts
在查看 Hadoop 文件之前检查您的路由等是否存在问题。
答案2
我在 Rackspace 上设置 5 节点集群时遇到了类似的问题。我仔细检查了我的/etc/hosts
文件。问题实际上是防火墙。数据节点通过端口与主节点通信9000
。您需要打开该端口进行通信。您还需要在数据节点上打开端口,50010
以便主节点进行通信来管理任务跟踪器。
此外,主节点9001
也应该开放端口,以便作业跟踪器进行通信。
更新所有这些的 iptables。
在主节点上:
iptables -I INPUT -p tcp --dport 9000 -j ACCEPT
iptables -I INPUT -p tcp --dport 9001 -j ACCEPT
service iptables save
service iptables reload
在每个数据节点/任务跟踪器上:
iptables -I INPUT -p tcp --dport 50010 -j ACCEPT
service iptables save
service iptables reload
答案3
在集群中运行 map Reduce 程序时我也遇到了同样的错误。有时候作业成功,有时候失败。
集群中的所有系统都是本地连接的。我通过使用以下命令禁用集群中所有机器的防火墙来解决此问题:
$ systemctl disablefirewalld 或 $ systemctl stopfirewalld
如果您没有 root 访问权限,请在命令前使用 sudo。我正在使用 fedora 20。如果您使用的是旧版本的 Linux,请检查如何在这些系统中禁用防火墙。
我希望这能帮到您。
问候,Sanjay Thakre
答案4
我也遇到过类似的问题。 (我正在使用 ubuntu 17.0)
>sudo gedit /etc/hosts
(在主机和从机上)
127.0.0.1 localhost
192.168.201.101 master
192.168.201.102 slave1
192.168.201.103 slave2
其次,> sudo gedit /etc/hosts.allow
添加条目: ALL:192.168.201.
禁用防火墙> sudo ufw disable
让它工作了。