Hadoop问题:DataNode进程不见了

DataNode进程不见了

问题描述

最近配置Hadoop的时候出现了这么一个现象,启动之后,使用jps命令之后是这样的:

看不到DataNode进程,但是能够正常的工作,是不是很神奇啊?

在一番百度谷歌之后,得出了结论:

我在启动Hadoop之前和启动之后,曾经多次使用如下命令,针对NameNode进行格式化:

hadoop namenode -format

这个问题,还不是你直接多次格式化造成的,而是你格式化之后,启动了Hadoop,然后将Hadoop关闭,重新格式化,再启动Hadoop造成的,这个时候你就发现,DataNode线程在jps命令中消失了,还能正常使用,就如我开头的那张图一样。造成这个问题的根源,是NameNode和DataNode的版本号不一致所致。这个问题不仅仅会出现在伪分布式,完全分布式中也会出现。这里以伪分布式进行展示。

如下是正常的两个文件的信息。

NameNode VERSION文件信息:

namespaceID=51628800
clusterID=CID-97bb16dc-c439-427c-9841-5e6e4667cb65
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1918730739-172.17.241.131-1526803461127
layoutVersion=-63

DataNode VERSION文件信息:

storageID=DS-4281731b-7a44-4c86-8844-e1927a4fc966
clusterID=CID-97bb16dc-c439-427c-9841-5e6e4667cb65
cTime=0
datanodeUuid=197c3d68-454b-4287-a5e5-90c01ed9be53
storageType=DATA_NODE
layoutVersion=-56

所谓版本号不一致,就是说的clusterID的值,上面的信息展示的是一致的,也表明NameNode和DataNode是一组的。

那么这两个文件存放在哪里呢?如下是你在Hadoop配置文件core-site.xml中的一项,就在此项指定的目录之下。

	<property>
		<!--用来指定hadoop运行时产生文件的存放目录-->
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop-2.7.1/tmp</value>
	</property>

那我就以我这个配置的路径来进行查找,首先到tmp目录下:

如上图是完整的查找路径。

问题分析

下面进行此问题的分析:

当第一次格式化,启动Hadoop的时候,没有任何问题,任何环节都是新产生的,所以哪怕你在启动Hadoop之前进行多次的NameNode格式化都可以,因为在Hadoop启动之前,DataNode的版本还没有生成,只有Hadoop启动之后DataNode的版本等响应信息才会在指定的目录下生成,这个时候就产生了NameNode和DataNode的一对一的关系。

当你关掉Hadoop之后进行二次NameNode格式化的时候,NameNode的版本信息等进行了重新写入,内容肯定和之前的不一样,这样就造成了,上文中我提到的clusterID不一致的问题,这样,你再次启动Hadoop,所有功能都正常使用,但唯独jps命令下看不到DataNode线程,这当然会使我们每个程序员感到惊慌,怎么办?

解决方案

方案一

首先,在格式化之前,将你设置的存储Hadoop信息目录下清空,即我上图中的例子tmp目录,将此目录清空即可。也可直接删除此目录,然后新建一个。

然后,进行格式化,这样所产生的NameNode和DataNode信息都是新的,也都是一组的,问题就解决了,这个是最简单最有效的方法。

方案二

如果有数据还在,又不想清空数据,那么这个方案就是你的福音。

既然是版本号不一致产生的问题,那么我们就单独解决版本号的问题,将你格式化之后的NameNode的VERSION文件找到,然后将里面的clusterID进行复制,再找到DataNode的VERSION文件,将里面的clusterID进行替换,保存之后重启,那么就可以正常的使用了。查找的的路径,已经在上图中进行了展示,这里不做赘述。

就以上问题,目前我只想到两个解决方案。

原文地址:https://www.cnblogs.com/h12l4/p/9079462.html

时间: 2024-10-12 08:16:43

Hadoop问题:DataNode进程不见了的相关文章

hadoop在子节点上没有datanode进程

经常会有这样的事情发生:在主节点上start-all.sh后,子节点有TaskTracker进程,而没有DataNode进程.环境:1NameNode   2DataNode三台机器,Hadoop为1.2.1解决办法:1.先停止Hadoop,bin/stop-all.sh2.三台机器都把hadoop1.2.1/tmp下所有文件删除,rm -rf tmp/*3.重新格式化DFS  bin/hadoop namenode -format4.再重启bin/start-all.sh5.查看各节点jps,

hadoop启动守护进程报JAVA_HOME is not set and could not be found

hadoop启动守护进程 sbin/start-dfs.sh 报如下错误:JAVA_HOME is not set and could not be found 解决办法(JAVA_HOME修改为具体的路径):vim etc/hadoop/hadoop-env.sh

启动hadoop。start-all.sh 缺少datanode进程

1)修改每个Slave的namespaceID使其与Master的namespaceID一致. 或者 2)修改Master的namespaceID使其与Slave的namespaceID一致. 该"namespaceID"位于"/usr/hadoop/tmp/dfs/data/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色是不变的. 例如:查看"Master"下的"VERSION"文件 查看

设置Hadoop的 dataNode的单个Map的内存配置

1.进入hadoop的配置目录 ,找到 环境变量的 $HADOOP_HOME cd $HADOOP_HOME 2.修改dataNode 节点的 单个map的能使用的内存配置 找到配置的文件: /opt/aisc/app/hadoop-2.3.0-cdh5.1.2/etc/hadoop/mapred-site.xml 增加如下的配置: 设置java的内存大小参数是:512M 大小根据的实际情况调整 <property> <name>mapred.child.java.opts<

Hadoop五个进程的作用和联系

1.NameNode: 相当于一个领导者,负责调度 ,比如你需要存一个1280m的文件如果按照128m分块 那么namenode就会把这10个块(这里不考虑副本)分配到集群中的datanode上并记录对于关系 .当你要下载这个文件的时候namenode就知道在那些节点上给你取这些数据了.它主要维护两个map 一个是文件到块的对应关系 一个是块到节点的对应关系. 2. secondarynamenode: 它是namenode的一个快照,会根据configuration中设置的值来决定多少时间周期

hadoop 开始时间datanode一个错误 Problem connecting to server

刚刚配置hadoop,namenode常开,但datanode但保留了错误.但不启动: 2014-05-04 10:43:33,970 WARNorg.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server:hadoop1/192.168.10.22:9000 2014-05-04 10:43:55,009 INFOorg.apache.hadoop.ipc.Client: Retrying connec

hadoop namenode datanode hdfs工作机制

大家都知道namenode是hadoop中的一个很重要的节点,因为他存在着跟datanode的交互跟客户端的交互,存储着dotanode中的元数据,所以就很想学习他们是如何沟通并能保证数据在任何情况下都不会丢失那? namenode的作用: 1.维护元数据信息. 2.维护hdfs的目录树. 3.相应客户端的请求. 我们先来看一下namenode大致的工作流程 可以看到namenode这边里面有三个存储单位,edits文件,edits.new 文件 ,fsimage文件,还有内存. edits文件

hadoop dfs.datanode.du.reserved 预留空间配置方法

对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置 <property> <name>dfs.datanode.du.reserved</name> <value>10737418240</value> </property> dfs.datanode.du.reserved的单位为字节,上面的预留空间为10G,预留30G:32212254720 预留20G:21474836480 预留空间可能遇到的

Hadoop启动datanode失败,clusterId有问题

问题: 搭建伪Hadoop集群的时候,运行命令: hdfs namenode -format 格式化或者说初始化namenode. 然后用命令: start-dfs.sh 来启动hdfs时,jps发现datanode先是启动了一下,然后就挂掉了,在http://192.168.195.128:50070 (HDFS管理界面)也看不到datanode的信息. 然后去datanode的日志上面看,看到这样的报错: 出错原因:(来自博客https://blog.csdn.net/qq_30136589