解决hadoop无法启动datanode或者无法启动namenode

Alex / 4-25 13:03 / Hadoop / Tag: Hadoop

   1.环境:

        Centos  6.5*64 + Hadoop2.2+jdk1.7

   2.问题描述

    近些天想把hadoop的思路重头开始顺一下,今天在搭建伪分布式时,出现了不能启动DataNode 的错误。后来在网上看了很多资料,在实际的生产环境中也会出现这种情况,不过我之前倒是没有出过这种问题。

    查看日志后发现


 org.apache.hadoop.hdfs.server.datanode.DataNode: IOException in offerService
java.io.IOException: Failed on local exception: java.io.EOFException; Host Details : local host is: "lishiyu06/192.168.8.94"; destination host is: "lishiyu06":9000; 
	at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)



ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: RECEIVED SIGNAL 15: SIGTERM

    3.原因分析

    由于多次format namenode节点导致  namdenode 的 namespaceID 与  datanode的namespaceID 不一致,从而导致namenode和 datanode的断连。
(因为在多次format中  有 reformat namenode的提示,多次format中不用已知都选Y 去format namenode的 namespaceID ,这样很容易造成ID不一致的情况)

    4.解决方案

    也从网上查了,但是网上很多人都说根据hdfs-site.xml ,找到dfs.name.dir和dfs.data.dir的路径,但我在配置这个伪分布式的时候,在hdfs-site.xml中只是配置了副本的数量为1,我在core-site.xml中配置了整个hadoop的运行文件 /cloud/hadoop-2.2.0/tmp  这里边发现跟他们指定的

目录结构相同  有data和name 文件夹data/current/VERSION   ----  name/current/VERSION 

        name:

namespaceID=1817359023
clusterID=CID-228ca81b-d1be-4653-8c49-29fa3e3db885
cTime=0
storageType=NAME_NODE
blockpoolID=BP-586120495-192.168.8.94-1429937722780
layoutVersion=-47


        

storageID=DS-1775903252-192.168.8.94-50010-1429934287395
clusterID=CID-e4a4a4f6-061d-45ef-beae-942e5abcafa9
cTime=0
storageType=DATA_NODE
layoutVersion=-47



这里边跟网上别人的不太一样哈,一个有namespaceID,一个没有,网上会有很多人,说改成一样的ID,额,我看到这里已经无法顺从他们的思路了。

但是,这个目录好像刚开始创建的时候是空的,我们在使用 hadoop namenode -format 时,才会初始化一个name文件夹,在启动datanode后,才会创建一个data目录,所以我使用的方法是,把/cloud/hadoop-2.2.0/tmp 目录清空,然后重新格式化namenode,再分别启动 hdfs 和yarn,果然胜利了!

5386 Jps
5351 NodeManager
5116 SecondaryNameNode
4866 NameNode
5255 ResourceManager
4956 DataNode

我这里用的这种方法,会导致数据的丢失。

看到网友还有其他的方法不会致使数据的丢失,想大家推荐一下:

http://blog.csdn.net/wanghai__/article/details/5752199





发表留言:

HDFS的常用SHELL操作 hadoop网络拓扑与机架感知
返回顶部
Themes by lishiyu.cn