Hadoop Cluster启动后数据节点(DataNode)进程状态丢失
- 在拥有三个节点的Hadoop集群环境中,其各节点的配置为:CPU Intel(R) Core(TM) i3-3120M CPU@2.50GHz 2.50GHz,内存RAM 6GB,Operation System Redhat Linux 5 x86-64bit.
- 首先通过命令hadoop dfs namenode -format格式化名称节点,格式化成功以后使用start-dfs.sh和start-yarn.sh脚本启动集群。此时,整个Hadoop集群使用 JPS进程查看命令发现均正常。在没有关闭Hadoop集群的状态下,我们使用了hadoop dfs namenode -format 命令重新格式化了名称节点。此时再次启动hadoop集群,发现数据节点Datanode进程在成功启动后不久就自动退出。我们重新进行了名称节点的格式化和集群的重启,但是数据节点上的进程依旧在重启后发生闪退的现象。经过查阅相关文献,博客http://my.oschina.net/liangtee/blog/161581帮助解决了这一问题,该博文内容如下。
Error 信息
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 namespaceID = 1462711424 .
- 查看日志发现错误类似上面所示:显示由于集群中不兼容的命名空间版本号而导致数据节点Datanode发生系统I/O的错误。肯定是由于在重新初始化名称空间的过程中发生了命名空间版本不一致的情况。
why
问题:Namenode名称节点的namespaceID与datanode数据节点的namespaceID不一致。
- 问题产生原因:每次 namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id , namenode format 清空了namenode下的数据,但是没有清空datanode下的数据,所以造成namenode节点上的namespaceID与datanode节 点上的namespaceID不一致。从而直接导致了数据节点启动失败。
- 解决方案1(会造成数据丢失,很难恢复找回)
- (1)停掉集群服务,调用stop-dfs.sh和stop-yarn.sh脚本。
- (2)在出问题的datanode节点上删除data目录,data目录即是在 hdfs-site.xml文件中配置的dfs.data.dir目录,本机器上那个是/var/lib/hadoop-0.20/cache/hdfs /dfs/data/ (注:我们当时在所有的datanode和namenode节点上均执行了该步骤。以防删掉后不成功,可以先把data目录保存一个副本).
- (3)格式化namenode,hadoop dfs namenode -format。
- (4)重新启动集群,调用start-dfs.sh和start-yarn.sh脚本。
- 这种方法带来的一个副作用即是,hdfs上的所有数据丢失。如果hdfs上存放有重要数据的时候,不建议采用该方法。其实,我们的目的就是要同步名称节点和数据节点上的NamespaceID,如果有办法可以直接同步该数据项 NamespaceID,那么我们就能够以最小程度的数据丢失实现Hadoop集群的修复。该帖也指出了另一种解决方案如下。
- Workaround 1: Start from scratch
Solution-1
I can testify that the following steps solve this error, but the side effects won't make you happy (me neither). The crude workaround I have found is to:
1.stop the cluster
2.delete the data directory on the problematic datanode: the directory is specified by dfs.data.dir in conf/hdfs-site.xml; if you followed this tutorial, the relevant directory is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data
3.reformat the namenode (NOTE: all HDFS data is lost during this process!)
4.restart the cluster
When deleting all the HDFS data and starting from scratch does not sound like a good idea (it might be ok during the initial setup/testing), you might give the second approach a try.
1.stop the cluster
2.delete the data directory on the problematic datanode: the directory is specified by dfs.data.dir in conf/hdfs-site.xml; if you followed this tutorial, the relevant directory is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data
3.reformat the namenode (NOTE: all HDFS data is lost during this process!)
4.restart the cluster
When deleting all the HDFS data and starting from scratch does not sound like a good idea (it might be ok during the initial setup/testing), you might give the second approach a try.
- Workaround 2: Updating namespaceID of problematic datanodes
Solution-2
Big thanks to Jared Stehler for the following suggestion. I have not tested it myself yet, but feel free to try it out and send me your feedback. This workaround is "minimally invasive" as you only have to edit one file on the problematic datanodes:
1.stop the datanode
2.edit the value of namespaceID in <dfs.data.dir>/current/VERSION to match the value of the current namenode
3.restart the datanode
If you followed the instructions in my tutorials, the full path of the relevant file is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data/current/VERSION (background: dfs.data.dir is by default set to ${hadoop.tmp.dir}/dfs/data, and we set hadoop.tmp.dir to /usr/local/hadoop-datastore/hadoop-hadoop).
1.stop the datanode
2.edit the value of namespaceID in <dfs.data.dir>/current/VERSION to match the value of the current namenode
3.restart the datanode
If you followed the instructions in my tutorials, the full path of the relevant file is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data/current/VERSION (background: dfs.data.dir is by default set to ${hadoop.tmp.dir}/dfs/data, and we set hadoop.tmp.dir to /usr/local/hadoop-datastore/hadoop-hadoop).
- If you wonder how the contents of VERSION look like, here's one of mine:
#contents of <dfs.data.dir>/current/VERSION
namespaceID=393514426
storageID=DS-1706792599-10.10.10.1-50010-1204306713481
cTime=1215607609074
storageType=DATA_NODE
layoutVersion=-13
namespaceID=393514426
storageID=DS-1706792599-10.10.10.1-50010-1204306713481
cTime=1215607609074
storageType=DATA_NODE
layoutVersion=-13
- 原 因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败,所要做的就是同步名称节点和数据节点下的所有 namespaceID。
相关推荐
Hadoop集群通常由一个NameNode(主节点)和多个DataNode(数据节点)组成,NameNode负责元数据管理,DataNode存储实际数据。 其次,软件环境准备,包括操作系统的选择(通常为Linux)、Java环境的安装(Hadoop基于...
5. **启动Hadoop服务**:依次启动DataNode、SecondaryNameNode、NameNode、ResourceManager和NodeManager。 6. **测试集群**:使用`hadoop fs -ls`命令检查HDFS是否正常工作,或者运行一个简单的WordCount程序来...
如果一个 Namenode 或 Datanode 节点出现故障,另一个节点可以继续提供服务,确保数据的可用性和一致性。 分布式文件系统 Hadoop 的分布式文件系统(HDFS)提供了高可用性和高性能的文件存储解决方案。它可以 ...
当不再需要使用Hadoop集群时,需要安全地关闭所有服务,以避免数据丢失或其他问题。 1. **停止YARN**:使用`stop-yarn.sh`脚本来停止YARN服务。 2. **停止HDFS**:使用`stop-dfs.sh`脚本来停止HDFS的所有组件。 综...
Hadoop作为大数据处理的核心组件,包括HDFS(Hadoop Distributed File System)和MapReduce等模块,构建一个Hadoop集群通常涉及多台服务器的配置、软件安装、服务启动和集群配置。通过Ansible,我们可以简化这个过程...
在完成这些配置后,还需要启动Hadoop和HBase的服务,确保所有节点正常运行,并进行必要的健康检查。在Hadoop集群中,Namenode和DataNode需要启动,HBase集群则需要启动Master和RegionServer。在实际应用中,可能会...
在这个过程中,我们通常会设置一个NameNode作为主节点,以及若干DataNode作为数据存储节点。在本例中,集群由1台NameNode(兼SecondaryNameNode,master)、2台DataNode(slave1、slave2)组成。 首先,我们需要在...
2. 日志节点主机:日志节点是轻量级的,可以与其他Hadoop守护进程部署在同一台服务器上。至少需要三个日志节点,以保证在一个节点失效的情况下,集群仍能保持可用。 五、配置步骤 1. 配置hdfs-site.xml文件,设置...
- **HDFS的数据读写流程**:客户端向NameNode发起请求,获取文件块的位置信息后,直接与DataNode通信完成数据的读写操作。 - **HDFS的优化技术**:如数据局部性优化、压缩编码等。 ##### HOUR 5: Getting Data into...
3. 主机配置:至少需要两台NameNode节点和多台DataNode节点,确保数据的冗余和容错。 二、配置SSH免密登录 在所有节点上执行ssh-keygen生成公钥和私钥,然后将公钥复制到其他节点,实现无密码登录,便于集群间操作...
- **知识点说明**:`hadoop dfsadmin –report` 命令主要用于显示HDFS的当前状态,包括DataNode列表、活节点、死节点等信息,并不直接用于检测损坏块。 14. **Hadoop默认调度器策略为FIFO** - **知识点说明**:...
6. **启动Hadoop**:启动Hadoop的各个服务,如DataNode、NameNode、ResourceManager等,一般通过`start-dfs.sh`和`start-yarn.sh`脚本完成。 接下来是Eclipse的集成,这有助于在IDE中开发和调试Hadoop程序。`...
- **启动新的DataNode**:在新节点上启动Hadoop DataNode服务。 - **检查是否添加成功**:使用`hadoop dfsadmin -report`命令查看集群状态,确认新节点是否已成功加入集群。 - **启动数据均衡器**:使用`start-...
Namenode是HDFS的中心节点,负责管理文件系统的元数据,Datanode是HDFS的数据节点,负责存储文件数据,而Client是用户与HDFS交互的接口。 Hadoop的另一个核心组件是MapReduce。MapReduce是一个分布式计算框架,提供...
在大数据处理领域,Hadoop是不可或缺的核心组件,它提供了一个分布式文件系统(HDFS)以及一个数据处理框架MapReduce。为了提高系统的可用性和可靠性,Hadoop引入了High Availability(HA)特性,允许NameNode和...
5. **slaves**:这不是一个.xml文件,但它列出了集群中的所有数据节点(DataNode)和节点管理器(NodeManager),这对于管理和监控集群非常重要。 6. **masters**:同样,此文件列出了集群的主节点,通常包括...
Hadoop 测试题 Hadoop 测试题主要涵盖了 Hadoop ...33. DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode 执行“Hadoop namenode -format”操作格式化磁盘。因此,正确答案是 √。
源码中的`ClusterStatus`和`DistributedFileSystem`类提供了集群状态的监控和动态调整能力。 六、总结 通过对Hadoop源码的深入分析,我们可以更清晰地理解其工作原理,这有助于优化性能,解决实际问题,以及为未来...
Active NameNode将编辑写入JournalNode,而Standby NameNode从JournalNode同步这些编辑,确保即使在Active NameNode故障后也能恢复到一致的状态。 **NameNode的切换** 在手动模式下,当Active NameNode发生故障时...