Hadoop Backup Node

简介:

要了解Hadoop Backup Node,要从Namenode的元数据说起。

我们都知道Namenode的元数据非常重要,如果元数据损坏,所有存储在datanode中的数据都读不出来了。另外,如果Namenode的元数据比较大,那么集群的启动速度非常慢。为了解决这两个问题,Hadoop弄了一个Secondary Namenode。

Namenode的元数据:
Hadoop Namenode元数据主要是两个文件:edits和fsimage。fsimage是HDFS的最新状态(截止到fsimage文件创建时间的最新状态)文件,而edits是自fsimage创建后的namespace操作日志。Namenode每次启动的时候,都要合并两个文件,按照edits的记录,把fsimage文件更新到最新。

如果是一个大的、比较繁忙的集群,它的edits文件增长会非常快,这样下次Namenode重启的过程会非常慢,因为它要进行大量的操作。为了加速启动过程,同时为了元数据的安全考虑,Hadoop搞了一个Secondary Namenode,它一般是一台独立的机器,内存大小与Namenode服务器相同。

Scondary Namenode:
Secondary Namenode定期地从Namenode上获取元数据。当它准备获取元数据的时候,就通知Namenode暂停写入edits文件。Namenode收到请求后停止写入edits文件,之后的log记录写入一个名为edits.new的文件。Scondary Namenode获取到元数据以后,把edits文件和fsimage文件在本机进行合并,创建出一个新的fsimage文件,然后把新的fsimage文件发送回Namenode。Namenode收到Secondary Namenode发回的fsimage后,就拿它覆盖掉原来的fsimage文件,并删除edits文件,把edits.new重命名为edits。
通过这样一番操作,就避免了Namenode的edits日志的无限增长,加速Namenode的启动过程。
但是Scondary Namenode有其自身的弱点,如checkpoint数据较旧,数据不一致等,新版本的hadoop已经把它放弃了,转而使用更加高效的Backup Node。

来看一下Backup Node:
Backup Node在内存中维护了一份从Namenode同步过来的fsimage,同时它还从namenode接收edits文件的日志流,并把它们持久化硬盘,Backup Node把收到的这些edits文件和内存中的fsimage文件进行合并,创建一份元数据备份。Backup Node高效的秘密就在这儿,它不需要从Namenode下载fsimage和edit,把内存中的元数据持久化到磁盘然后进行合并即可。
目前,hadoop集群只支持一个Backup Node,如果Backup Node出了问题,Hadoop元数据的备份机制也就失效了,所以hadoop计划在未来能支持多个Backup Node。

Backup Node的配置与启动:
和它有关的配置项,需要注意的是,Namenode和Backup Node都要配置这些选项:
hdfs-site.xml:dfs.backup.address、dfs.backup.http.address
core-site.xml:fs.checkpoint.period、fs.checkpoint.size、fs.checkpoint.dir、fs.checkpoint.edits.dir
启动:
在dfs.backup.address配置的节点上,运行bin/hdfs namenode -checkpoint

但是非常扯淡的是,虽然hadoop-1.0.3的官方hdfs用户文档中说放弃了Secondary Namenode,建议使用Backup Node,但在default配置文件中找不到关于backupnode的相关配置,反而secondary namenode的配置还保留着。到网上搜了一下,好像hadoop 1.0.3中并没有启用Backup Node,实际的原因是,hadoop 1.0.x完全是Apache的恶搞,Apache把hadoop 0.20.205直接命名成了hadoop 1.0!这么坑爹的事情都有!而Backup Node是Hadoop 0.21、0.22(0.23,它是0.22的超集)版本里的东西,这么多hadoop版本,功能都还不一样!

混乱的Apache Hadoop版本。

Namenode元数据恢复流程:
1、启动Backup Node
2、在Namenode上清空dfs.name.dir下的文件
3、在Namenode上执行命令:bin/hadoop namenode -importCheckpoint

hadoop还有哪些手段来保证namenode元数据的安全?
1) 对dfs.name.dir配置多个路径,保存一份元数据到远程主机。这样,加上Backup Node上的元数据,我们就有了三份元数据。我们的配置:

 
  1. <property> 
  2. <name>dfs.name.dir</name> 
  3. <value>/usr/local/hadoop/name,/home/hd_nn_remote_backup</value>
  4. </property> 

 需要注意的是,如果配置了多个路径,在恢复Namenode元数据时,要同时清空这些目录下的文件。
/home/hd_nn_remote_backup是一个远程主机目录,通过NFS挂载到本地;

2) Namenode热备。目前的热备方案有Facebook的Avatar、DRBD等。 
 
一次Namenode恢复实践:
我们的环境是RHEL 5.6,Apache Hadoop 1.0.3。由于未采用Backup Node,我们仍然使用的是Secondary Namenode的配置,所以跟Backup Node的数据恢复有点不太一样。
上周五,由于服务器在重启时忘记停掉Hadoop集群,导致了Namenode元数据损坏,所以进行了一次恢复操作。遗憾的是,由于Secondary Namenode获取Namenode元数据时出了问题,而我们没有及时注意到这个情况,导致恢复出来的数据丢失了几天的量。这里提醒大家一下,到Namenode机器的dfs.name.dir目录下看一看,如果Hadoop把大量的日志记录在edits.new,而不是edits文件,那你就要小心了,可能Secondary Namenode那边出了状况,要及时查看日志,解决问题。一般地,如果未配置dfs.secondary.address和dfs.secondary.http.address,会导致这个问题。
恢复过程比较简,大略如下:
1、删除Namenode上的dfs.name.dir目录下所有的文件,如果配置了多个目录,要全部清空
2、复制Secondary Namenode上的fs.checkpoint.dir目录下的所有文件到Namenode的fs.checkpoint.dir目录下
3、在Namenode上执行bin/hadoop namenode -importCheckpoint
4、ctrl + c终止会话,删除NN上的scondary目录下的文件
5、正式启动Namenode:bin/hadoop-daemon.sh start namenode
6、bin/hadoop dfsadmin -safemode leave
 
上面的方法分几个步骤,很啰嗦,最简单的方法是:把Secondary Namenode上的fs.checkpoint.dir目录下的current下的文件复制到Namenode的dfs.name.dir目录下的current目录中,然后启动namenode!
上面两个恢复的方法,我都是亲自试过,都是可以的。
本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/1033994

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
分布式计算 资源调度 Java
安装hadoop伪分布式模式(Single Node Cluster)
目的 本文档介绍如何去安装单节点hadoop集群,以便你可以的了解和使用hadoop的HDFS和MapReduce. 环境: os: CentOS release 6.5 (Final) ip: 172.
721 0
|
11天前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
33 2
|
11天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
13天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
50 1
|
30天前
|
消息中间件 SQL 分布式计算
大数据Hadoop生态圈体系视频课程
熟悉大数据概念,明确大数据职位都有哪些;熟悉Hadoop生态系统都有哪些组件;学习Hadoop生态环境架构,了解分布式集群优势;动手操作Hbase的例子,成功部署伪分布式集群;动手Hadoop安装和配置部署;动手实操Hive例子实现;动手实现GPS项目的操作;动手实现Kafka消息队列例子等
20 1
大数据Hadoop生态圈体系视频课程
|
4月前
|
分布式计算 资源调度 搜索推荐
《PySpark大数据分析实战》-02.了解Hadoop
大家好!今天为大家分享的是《PySpark大数据分析实战》第1章第2节的内容:了解Hadoop。
48 0
《PySpark大数据分析实战》-02.了解Hadoop
|
4月前
|
存储 搜索推荐 算法
【大数据毕设】基于Hadoop的音乐推荐系统的设计和实现(六)
【大数据毕设】基于Hadoop的音乐推荐系统的设计和实现(六)
165 0
|
4月前
|
分布式计算 Hadoop Java
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
53 1

热门文章

最新文章

相关实验场景

更多