常见错误:
1. 出现类似:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs …
的异常,是因为先格式化了 namenode ,后来又修改了配置导致。将 dfs/data 文件夹内容删除,再重新格式化 namenode 即可。
2. 出现类似:
INFO org.apache.hadoop.ipc.Client: Retrying connect to server:…
的异常,首先确认 name node 是否启动。如果已经启动,有可能是 master 或 slave1 中的配置出错,集群配置参考步骤 11 。也有可能是防火墙问题,需添加以下例外:
50010 端口用于数据传输, 50020 用于 RPC 调用, 50030 是 WEB 版的 JOB 状态监控, 54311 是job tracker , 54310 是与 master 通信的端口。
完整的端口列表见:
http://www.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 50010 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 50020 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 50030 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 50060 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 54310 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 54311 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 50010 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 50020 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 50010 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 50020 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 50030 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 50030 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 50060 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 50060 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 54310 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 54310 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 54311 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 54311 -j ACCEPT
保存规则:
/etc/init.d/iptables save
重启 iptables 服务:
service iptables restart
如果还是出现问题 2 的错误,那可能需要手工修改 /etc/sysconfig/iptables 的规则。手动添加这些规则。若有 ”reject-with icmp-host-prohibited” 的规则,需将规则加到它的前面。注意修改配置文件的时候,不需要带 iptables 命令。直接为类似于:
-A OUTPUT -p tcp -m tcp --sport 54311 -j ACCEPT
或关闭防火墙 ( 建议,因为端口太多,要加的例外很多 )
service iptables stop
3. 在 /etc/hosts 文件中,确保一个 host 只对应一个 IP ,否则会出错(如同时将 slave1 指向 127.0.0.1 和192.168.225.66 ),可能导致数据无法从一个节点复制至另一节点。
4. 出现类似:
FATAL org.apache.hadoop.mapred.TaskTracker: Error running child : java.lang.OutOfMemoryError: Java heap space…
的异常,是因为堆内存不够。有以下几个地方可以考虑配置:
a. conf/hadoop-env.sh 中, export HADOOP_HEAPSIZE=1000 这一行,默认为注释掉,堆大小为1000M ,可以取消注释,将这个值调大一些(对于 16G 的内存,可以调至 8G )。
b. conf/mapred-site.xml 中,添加 mapred.map.child.java.opts 属性,手动指定 JAVA 堆的参数值为 -Xmx2048m 或更大。这个值调整 map 任务的堆大小。即:
<property>
<name>mapred.map.child.java.opts </name>
<value>-Xmx2048m</value>
</property>
c. conf/mapred-site.xml 中,添加 mapred.reduce.child.java.opts 属性,手动指定 JAVA 堆的参数值为 -Xmx2048m 或更大。这个值调整 reduce 任务的堆大小。即:
<property>
<name>mapred.reduce.child.java.opts </name>
<value>-Xmx2048m</value>
</property>
注意调整这些值之后,要重启 name node 。
5. 出现类似: java.io.IOException: File /user/root/pv_product_110124 could only be replicated to 0 nodes, instead of 1…
的异常,首先确保 hadoop 临时文件夹中有足够的空间,空间不够会导致这个错误。
如果空间没问题,那就尝试把临时文件夹中 dfs/data 目录删除,然后重新格式化 name node :
hadoop namenode -format
注意:此命令会删除 hdfs 上的文件
6. 出现类似: java.io.IOException: Broken pipe…
的异常,检查你的程序吧,没准输出了不该输出的信息,如调试信息等。