1. namenode和datanode的namespaceID不一致
java.io.IOException:Incompatible namespaceIDs in /root/tmp/dfs/data:namenode namespacesID=335454;datanode namespaceID=131321....
这个问题是多次格式化namenode造成的,有两种方法可以解决;第一删除datanode的所有资料(。。。。dfs/data下),第二种是修改datanode的namespaceID(位于${/hadoop/tmp/dir}/dfs/data/current/VERSION)或者修改namenode的namespaceID(位于${/hadoop/tmp/dir}/dfs/name/current/VERSION)。使其一致。
2. datanode间storageID相同
问题:2012-09-07 23:58:51,240 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DataNode is shutting down: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.protocol.UnregisteredDatanodeException: Data node 192.168.100.11:50010 is attempting to report storage ID DS-1282452139-218.196.207.181-50010-1344220553439. Node 192.168.100.12:50010 is expected to serve this storage.
搭建集群时,直接克隆会出现这个问题。解决方法同上两种,最好修改${/hadoop/tmp/dir}/dfs/data/current/VERSION中的storageID,使其不同。第一种会导致hdfs数据丢失。
DataNode节点向NameNode节点注册,一是告诉NameNode节点自己提 供服务的网络地址端口,二是获取NameNode节点对自己的管理与控制。Datanode 注册只会被两个地方调用, Datanode启动和心跳收到注册命令。DatanodeRegistration这个类主要用于,当Datanode向Namenode发送注册信息 时,它要向Namenode提供一些自己的注册信息。同时这个类中还可以设置它的父类就是DatanodeID的Name、infoPort、 storageInfo这些内容。name 表示DataNode节点提供数据传输/交换的服务地址端口,storageID表示DataNode节点的存储器在整个HDFS集群中的全局编 号,infoPort表示查询DataNode节点当前状态信息的端口号,ipcPort表示DataNode节点提供 ClientDatanodeProtocol服务端口号。
(1) datanode启动是会加载DataStorage,如果不存在则会format
(2)初次启动DataStorage的storageID是空的,所以会生成一个storageID
dnReg.storageID = "DS-" + rand + "-"+ ip + "-" + dnReg.getPort() + "-" + System.currentTimeMillis();
(3)注册成功后该storageID会写入磁盘,永久使用。
所以修改rand部分就可以。
3. 集群重启时防火墙自动开启导致:
问题:
2012-07-04 18:43:30,475 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: /192.168.18.218:9000. Already tried 8 time(s).
2012-07-04 18:43:31,475 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: /192.168.18.218:9000. Already tried 9 time(s).
2012-07-04 18:43:31,479 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to /192.168.18.218:9000 failed on local exception: java.net.NoRouteToHostException: 没有到主机的路由
at org.apache.hadoop.ipc.Client.wrapException(Client.java:775)
at org.apache.hadoop.ipc.Client.call(Client.java:743)
解决方法:在root权限下关闭防火墙:service iptables stop
最好配置成机器重启默认防火墙关闭:[root@junlings ~]# chkconfig iptables off #开机不启动防火墙服务
[root@junlings ~]# chkconfig iptables on #开机启动防火墙服务
4. name node in safe mode即安全模式
问题:org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode
解决:bin/hadoop dfsadmin -safemode leave
用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。