20131010配置hadoop集群遇到namespaceID、storage ID、防火墙的问题

来源:互联网 发布:女排五连冠 知乎 编辑:程序博客网 时间:2024/06/05 00:02

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 - 等待,一直到安全模式结束。