Hadoop 数据节点DataNode异常

转载自 :http://blog.csdn.net/gis_101/article/details/52679914

1、问题背景

操作系统:CentOS7 64位 
Hadoop版本:Hadoop2.7.3 
JDK:1.8.0_65

2、问题描述

使用start-all.sh脚本或者先后执行start-dfs.sh、start-yarn.sh脚本启动Hadoop后,通过jps命令检测DataNode节点进程发现有DataNode进程,数秒后DataNode进程莫名其妙“消失”了,只有Jps、NodeManager两个进程。简而言之就是DataNode进程异常,由于某种原因导致无法启动或者启动后数据节点DataNode进程自动关闭。

3、问题原因

通过查看DataNode节点日志,报Incompatible clusterIDs异常。(注意如果没有配置hadoop日志路径默认在$HADOOP_INSTALL/logs目录下,也就是安装目录的logs文件夹里,当然可以修改hadoop-env.sh文件中的HADOOP_LOG_DIR,比如加入export HADOOP_LOG_DIR=/var/log/hadoop)。DataNode节点日志文件异常信息如下:

/**************************************************
2016-09-26 16:38:56,122 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/tmp/hadoop-hadoop/dfs/data/ 
java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-hadoop/dfs/data: namenode clusterID = CID-1ac4e49a-ff06-4a34-bfa2-4e9d7248855b; datanode clusterID = CID-3ae02e74-742f-4915-92e7-0625fa8afcc5 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:775) 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:300) 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:416) 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395) 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:573) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1362) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1327) 
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317) 
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223) 
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:802) 
at java.lang.Thread.run(Thread.java:745) 
2016-09-26 16:38:56,124 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool (Datanode Uuid unassigned) service to s0/192.168.48.134:8020. Exiting. 
java.io.IOException: All specified directories are failed to load. 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:574) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1362) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1327) 
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317) 
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223) 
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:802) 
at java.lang.Thread.run(Thread.java:745) 
2016-09-26 16:38:56,124 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool (Datanode Uuid unassigned) service to s0/192.168.48.134:8020 
2016-09-26 16:38:56,226 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool (Datanode Uuid unassigned) 
2016-09-26 16:38:58,227 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode 
2016-09-26 16:38:58,228 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0 
2016-09-26 16:38:58,232 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: 
/**************************************************/

日志文件分析如下: 
首先日志警告,“Failed to add storage directory [DISK]file:/tmp/hadoop-hadoop/dfs/data/ 
”添加存储文件失败,失败路劲位于“/tmp/hadoop-hadoop/dfs/data/”。紧接着报Java IO异常“java.io.IOException”,异常信息里显示的是,namenode和datanode的clusterID不一致,这些异常就导致了后面提示初始化失败、DataNode进程退出等异常、警告信息。网上很多其他博主说,这是因为多次对namenode进行format导致的。将namenode和datanode的clusterID和namespaceID修改一致即可。的确,进行了两次format操作,但是修改过后仍然报同样的问题,通过对比”/tmp/hadoop-hadoop/dfs/data/current/VERSION”文件发现VERSION文件里clusterID都是一致的,其他的信息也一致。

4、解决方案

由于无法通过直接修改VERSION文件里clusterID、namespaceID解决问题。于是尝试重命名了一下各个数据节点DataNode“/tmp/hadoop-hadoop/dfs/data/”目录下current文件夹,再重新启动hadoop,发现hadoop运行起来了。各个数据节点的DataNode、NodeManager等进程信息正常,查看各个节点的日志,一切显示正常。然后查看了一下“/tmp/hadoop-hadoop/dfs/data/”目录,发现自动创建了一个current目录。

5、总结

该问题因为多次对namenode进行format,每一次format主节点NameNode产生新的clusterID、namespaceID,于是导致主节点的clusterID、namespaceID与各个子节点DataNode不一致。当format过后再启动hadoop,hadoop尝试创建新的current目录,但是由于已存在current目录,导致创建失败,最终引起DataNode节点的DataNode进程启动失败,从而引起hadoop集群完全启动失败。因此可以通过直接删除数据节点DataNode的current文件夹,进行解决该问题。

原文地址:https://www.cnblogs.com/qinfei0967/p/8438752.html

时间: 2024-10-09 23:55:16

Hadoop 数据节点DataNode异常的相关文章

hdfs 名称节点和数据节点

名字节点(NameNode )是HDFS主从结构中主节点上运行的主要进程,它指导主从结构中的从节点,数据节点(DataNode)执行底层的I/O任务. 名字节点是HDFS的书记员,维护着整个文件系统的文件目录树,文件/目录的元信息和文件的数据块索引,即每个文件对应的数据块列表(后面的讨论中,上述关系也称名字节点第一关系).这些信息.以两种形式存储在本地文件系统中:一种是命名空间镜像(File System Image, FSImage,也称文件系统镜像),另一种是命名空间镜像的编辑日志(Edit

hadoop问题总结:datanode启动后,在web50070端口发现不到datanode节点(能力工场)

直接上问题:这两天为了试验,安装了两套集群: (1)32位hadoop1集群(5个节点); (2)64位hadoop2集群(6个节点) 两个集群中都遇到过这样的问题:在namenode正常启动hadoop集群后,查看datanode是正常的显示存在进程,但是在web界面中查看的时候,发现数据节点全部属于宕机,或者就是干脆直接没有datanode.还有种情况,datanode启动后,jps查看是在的,但是一会再去查看,发现挂掉了.还有就是,存储空间显示占用100% 其实这两个集群问题是一样的,都是

Hadoop源码分析——数据节点写数据1

即使不考虑数据节点出错后的故障处理,文件写入也是HDFS中最复杂的流程.本章以创建一个新文件并向文件中写入数据,然后关闭文件为例,分析客户端写文件时系统各节点的配合,如下图所示. 客户端调用DistributedFileSystem的create()方法创建文件,上图的步骤1,这时,DistributedFileSystem创建DFSOutputStream,并由远程过程调用,让名字节点执行同名方法,在文件系统的命名空间中创建一个新文件.名字节点创建新文件时,需要执行各种各样的检查,如名字节点处

Hadoop源码分析——数据节点写数据2

数据接收 客户端写往数据节点的数据由org.apache.hadoop.hdfs.server.datanode.BlockReceiver.java中的receiveBlock方法接收 void receiveBlock( DataOutputStream mirrOut, // output to next datanode DataInputStream mirrIn, // input from next datanode DataOutputStream replyOut, // ou

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Incompatible namespaceIDs

用三台centos操作系统的机器搭建了一个hadoop的分布式集群.启动服务后失败,查看datanode的日志,提示错误:ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /var/lib/hadoop-0.20/cache/hdfs/dfs/data: namenode namespaceID = 240012870; datanode

实战1 伪分布式Hadoop单节点实例 CDH4集群安装 Hadoop

Hadoop由两部分组成 分布式文件系统HDFS 分布式计算框架MapReduce 其中分布式文件系统(HDFS)主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统之上,对于存储在分布式文件系统中的数据进行分布式计算. 详细的介绍个节点的作用 NameNode: 1.整个Hadoop集群中只有一个NameNode.它是整个系统的中枢,它负责管理HDFS的目录树和相关文件 元数据信息.这些信息是以"fsimage (HDFS元数据镜像文件)和Editlog(HDFS文件改动

hadoop2.2 新增数据节点

Hostname IP Hadoop版本 Hadoop 功能 系统 hadoop2 192.168.119.131 2.2.0 namenode jdk1.6+hadoop centos5.9             h2slave1 192.168.119.132 2.2.0 datanode jdk1.6+hadoop+hive+sqoop+mysql centos5.9             h2slave2 192.168.119.133 2.2.0 datanode jdk1.6+h

Hadoop Single Node Cluster——Hadoop单节点集群的安装

Hadoop Single Node Cluster只以一台机器来建立Hadoop环境,仍然可以使用Hadoop命令,只是无法发挥使用多台机器的威力. 安装JDK 因为Hadoop是以Java开发的,所以必须先安装Java环境.本文是以Ubuntu系统为例 安装前查看java版本 在命令终端输入  java -version 查看 安装成功 返回的是 java 版本,未安装会提示包含在下列软件包中,执行下列命令安装 sudo apt-get update sudo apt-get install

Hadoop之HDFS(DataNode) (面试开发重点)

1 DataNode工作机制 DataNode工作机制,如图所示. 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. 2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息. 3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块.如果超过10分钟没有收到某个DataNode的