Hadoop集群所有的DataNode都启动不了解决办法

[logs日志]
/data/hadoop-2.7.0/logs
gedit hadoop-neworigin-datanode-s100.log

查看clusterID发现datanode和namenode之间的ID不一致

进入hdfs-site.xml 配置文件查看:


[hdfs-site.xml]
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/neworigin/hadoop/hdfs/name</value>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>/home/neworigin/hadoop/hdfs/data</value>
</property>

<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/home/neworigin/hadoop/hdfs/namesecondary</value>
</property>
</configuration

cd/home/neworigin/hadoop/hdfs/  

把所有的data删掉  重新创建,每台都是一样。然后到s100输出hadoop namenode -format,start-all.sh,这样就可以查看jps了。

首先会出现几种情况,才会出现启动不了datanode的情况。

1.首先修改过master那台的配置文件,

2.多次Hadoop namenode -format这种不好的习惯。

一般会出现一下报错:

java.io.IOException: Cannot lock storage /usr/hadoop/tmp/dfs/name. The directory is already locked.

或者是:

[root@hadoop current]# hadoop-daemon.sh start datanode

starting datanode, logging to /usr/local/hadoop1.1/libexec/../logs/hadoop-root-datanode-hadoop.out

[root@hadoop ~]# jps

jps命令发现没有datanode启动

对于这种情况请先试一下:

在坏死的节点上输入如下命令即可:

bin/Hadoop-daemon.sh start DataNode

bin/Hadoop-daemon.sh start jobtracker

如果还不可以的话,那么恭喜你和我遇到的情况一下。

正确的处理方法是,到你的每个Slave下面去,找到.../usr/hadoop/tmp/dfs/  -ls

会显示有: data

这里需要把data文件夹删掉。接着直接在刚才的目录下启动hadoop

start-all.sh

接着查看jps

那么就会出现datanode.了

接着去看

http://210.41.166.61(你的master的IP):50070

里面的活节点有多少个?

http://210.41.166.61(你的master的ip):50030/

显示的node数目。


当我动态添加一个Hadoop从节点的之后,出现了一个问题:

[root@hadoop current]#  hadoop-daemon.sh start datanode
starting datanode, logging to /usr/local/hadoop1.1/libexec/../logs/hadoop-root-datanode-hadoop.out
[root@hadoop ~]#  jps
jps命令发现没有datanode启动,所以去它提示的路径下查看了hadoop-root-datanode-hadoop.out文件,可以是空白的。
后来在该路径下发现了 /usr/local/hadoop1.1/logs/hadoop-root-datanode-hadoop.log文件
 
查看日志文件
[root@hadoop current]#  vim /usr/local/hadoop1.1/logs/hadoop-root-datanode-hadoop.log
STARTUP_MSG:  version = 1.1.2
STARTUP_MSG:  build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
2014-10-31 19:24:28,543 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2014-10-31 19:24:28,565 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2014-10-31 19:24:28,566 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2014-10-31 19:24:28,566 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2014-10-31 19:24:28,728 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2014-10-31 19:24:29,221 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:  Incompatible namespaceIDs in /usr/local/hadoop/tmp/dfs/data:  namenode namespaceID = 942590743; datanode namespaceID = 463031076
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:399)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:309)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1651)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1590)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)

2014-10-31 19:24:29,229 INFO org.apache.hadoop.hdfs.server.datanode.DataNode:  SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at hadoop/192.168.0.100
************************************************************/
 
读日志文件:
先看到ERROT信息中 Incompatible这个单词,意思是“不相容的”。所以我们可以看出是datanode的namespaceID出错了。
所以最后shutDown了。
 
解决思路:
(1)先去hadoop路径下的配置文件 hdfs-site.xml,看看:
[root@hadoop current]#  vim /usr/local/hadoop1.1/conf/hdfs-site.xml
.....................................................................................................................................
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>${hadoop.tmp.dir}/dfs/name</value>
        <description>this is a comma-delimited list of directories
          then the name table is replicated in all of the directories,
          for redunancy.
        </description>
    </property>
</configuration>
.....................................................................................................................................
里面并没有有关datanode的配置信息,如果你有类似于下面的内容:
<property>  
                <name>dfs.data.dir</name>  
                <value>/data/hdfs/data</value>
 </property> 
说明你的datanode配置文件不再默认路径,而是你自己设置过的路径下。
 
(2)进入datanode的 dfs.data.dir 的 current目录,修改里面的文件VERSION
由于我是默认的,所以路径是/usr/local/hadoop/tmp/dfs/data/current/VERSION。
这个版本不同,可能路径也不同,最好自己去找找。
[root@hadoop current]#  vim /usr/local/hadoop/tmp/dfs/data/current/VERSION
.....................................................................................................................................
#Thu Oct 30 04:52:01 PDT 2014
namespaceID=463031076
storageID=DS-1787154912-192.168.0.100-50010-1413940826285
cTime=0
storageType=DATA_NODE
layoutVersion=-32
.....................................................................................................................................
看里面的 namespaceID=463031076, 可以发现,跟 hadoop-root-datanode-hadoop.log 中的 datanode namespaceID = 463031076 的一样, 这说明他是读取这个文件的,所以我们没有找错。
 
(3)修改这个版本信息文件 VERSION
ID与 hadoop-root-datanode-hadoop.log中 namenode namespaceID = 942590743一致
 
ps:我想大家应该可以想到namenode namespaceID是从哪里来的:
[root@hadoop current]#  vim /usr/local/hadoop/tmp/dfs/name/current/VERSION
.....................................................................................................................................
#Fri Oct 31 19:23:44 PDT 2014
namespaceID=942590743
cTime=0
storageType=NAME_NODE
layoutVersion=-32
.....................................................................................................................................
这里的ID是不是与 hadoop-root-datanode-hadoop.log中 namenode namespaceID = 942590743一致?
 
(4)修改完以后,重新运行 datanode
[root@hadoop current]# hadoop-daemon.sh start datanode
[root@hadoop current]# jps
8581 DataNode
看到DataNode,说明已经跑起来了。

java.io.IOException: File  … could only be replicated to 0 nodes, instead of 1。
 使用dfsadmin -report报无数据节点,如下:
[Hadoop@namenode hadoop]$ hadoop dfsadmin -report
  
 Configured Capacity: 0 (0 KB)
 Present Capacity: 0 (0 KB)
 DFS Remaining: 0 (0 KB)
 DFS Used: 0 (0 KB)
 DFS Used%: ?%
 Under replicated blocks: 0
 Blocks with corrupt replicas: 0
 Missing blocks: 0
————————————————-
Datanodes available: 0 (0 total, 0 dead)


造成有个问题的原因最常见的是多次 格式化namenode造成的,即 namespaceID 不一致。
 这种情况清空logs,重启启动有时候甚至有时候都没有datanode的日志产生。
 解决方法:找到不一致的 VERSION 修改  namespaceID

或者
 删除 hdfs/data 中全部文件,重新初始化namenode,这样做数据就全部没了(看到的结果是这样)

PS : 还有一种说法造成启动不了datanode的原因是 data文件的权限问题,这个问题目前没有遇到



  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值