Hadoop 2.7.x NameNode重新格式化后导致DataNode无法启动问题
来源:互联网 发布:安卓手机数据恢复工具 编辑:程序博客网 时间:2024/06/05 14:38
简介
Hadoop 2.7.x伪分布式运行环境下,由于NameNode重新格式化后,导致DataNode无法正常启动。本文总结了此问题的解决方法和思路,供个人参考。
问题描述
通过脚本start-dfs.sh启动hadoop, 运行hadoop fs命令出现异常信息:
hadoop@bob-virtual-machine:~$ start-dfs.sh Starting namenodes on [localhost]localhost: starting namenode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-hadoop-namenode-bob-virtual-machine.outlocalhost: starting datanode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-hadoop-datanode-bob-virtual-machine.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-bob-virtual-machine.outhadoop@bob-virtual-machine:~$ hadoop fs -put -l /home/hadoop/hadoop-2.7.3/README.txt wordcount/README.txt17/01/31 18:34:30 WARN hdfs.DFSClient: DataStreamer Exceptionorg.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/hadoop/wordcount/README.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation. at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1571)从输出的异常信息:There are 0 datanode(s) running and no node(s) are excluded in this operation. 发现DataNode并没有正常启动起来。通过jps命令查看,确实没有发现DataNode的服务进程:
hadoop@bob-virtual-machine:~$ jps2160 SecondaryNameNode1815 NameNode2410 Jps
问题排查
经过上面的分析,我们发现DataNode没有能够正常启动,接下来如何分析呢? 最直接的方法使分析DataNode启动过程的log信息,看能否找到可用的信息。hadoop的log信息存放在安装目录的logs下,很容易找到datanode相关的log文件。分析其中输出信息发现:
2017-01-31 18:52:28,708 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/usr/local/hadoop/tmp/dfs/data/java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop-2.7.3/tmp/dfs/data: namenode clusterID = CID-af858ec6-019a-48bb-81c7-beecee82a64f; datanode clusterID = CID-31b1c3ac-8dfa-45bf-a35a-c519700d7d9b 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:748)输出信息显示namenode和datanode的clusterID不兼容,这就是问题的原因。
问题解决
知道问题的原因,解决起来就比较容易了。查看hdfs-site.xml配置文件,查看namenode和datanode的工作目录:
hadoop@bob-virtual-machine:/usr/local/hadoop/etc/hadoop$ cat hdfs-site.xml<?xml version="1.0" encoding="UTF-8"?><?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.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property></configuration>在datanode的工作目录下,可以找到current/VERSION文件,我们查看其内容发现有clusterID相关的配置,将其修改为与namenode中的配置一致。
hadoop@bob-virtual-machine:/usr/local/hadoop/tmp/dfs/data/current$ cat VERSION#Tue Jan 31 19:07:03 EST 2017storageID=DS-4c553ffa-1f5f-4be8-b19e-86463eb742caclusterID=CID-af858ec6-019a-48bb-81c7-beecee82a64fcTime=0datanodeUuid=7dd45c60-3e11-4fbf-9435-eab7d97329fbstorageType=DATA_NODElayoutVersion=-56重新启动hadoop后,datanode开始工作正常。
总结
究其原因,是因为问题出现之前,在排查其它问题时,个人重新执行hdfs namenode -format,导致namenode的current目录会被删除并进行重建,其clusterID也会发生变化,而datanode中的配置并没有随namenode发生变化,造成了两个clusterID不一致问题。因此为避免这种情况的发生,在namenode重新格式化后,需要修改datanode的clusterID的配置,或者删除datanode的current文件夹,以保持namenode和datanode配置一致。如果删除datanode的current目录,需要为当前用户重新创建工作目录:hdfs dfs -mkdir -p /user/user-name。
阅读全文
0 0
- Hadoop 2.7.x NameNode重新格式化后导致DataNode无法启动问题
- hadoop多次格式化后导致VERSION不一致,启动namenode和datanode时报错的解决方法
- Hadoop多次格式化导致datanode无法启动
- hadoop多次格式化namenode造成datanode无法启动问题解决
- hadoop多次格式化namenode造成datanode无法启动问题解决
- Hadoop DataNode, NameNode无法启动
- hadoop namenode -format 后出现datanode 无法启动故障解决办法
- 解决更改hadoop核心配置文件后会出现DataNode,或者NameNode无法启动的问题
- 重新格式化datanode无法启动
- 重新 format namenode datanode无法启动
- hadoop namenode -format之后datanode无法启动问题
- hadoop多次格式化后,导致datanode启动不了
- hadoop多次格式化后,导致datanode启动不了
- 多次格式化namenode之后datanode无法启动
- 多次格式化namenode之后datanode无法启动
- NameNode多次Format后DataNode无法启动的问题
- 部署hadoop后,datanode无法连接namenode
- hadoop namenode和datanode无法启动
- 表单
- 循环链表
- SVM分类器和softmax分类器原理区别对比(2)---深度学习
- 父类和子类静态代码块、非静态代码块、构造函数(方法)执行的先后顺序问题
- C++11标准及知识点的记录(4)
- Hadoop 2.7.x NameNode重新格式化后导致DataNode无法启动问题
- 上传文件 是中文名时 出现乱码,或不能上传
- dll秘籍
- 第2篇 归并排序
- Java经典面试题(5)
- 【翻译】ASP.NET Core 文档目录
- 网易2018年编程题
- hadoop集群搭建
- 为什么匿名内部类和局部内部类只能访问final变量