一种hdfs高可用性方案的实现方法

文档序号:9289975阅读:503来源:国知局
一种hdfs高可用性方案的实现方法
【技术领域】
[0001]本发明涉及Hadoop分布式文件系统高可用性领域,关于一种引入热备NameNode的HDFS高可用性方案的实现方法。
【背景技术】
[0002]Hadoop提供了一个能够运行在商用PC机上的Hadoop分布式文件系统HDFS。它为应用程序提供了很高的吞吐量,这非常适合于大规模数据的处理。HDFS在设计之初便提出了这样一个假设:将计算移动到数据端比将数据移动到计算端更加廉价。其中的核心思想便是把大量的应用计算移动到数据所存储的地方,然后在这些数据上面执行这些计算,这样便大大提高Hadoop的吞吐量。
[0003]其中HDFS (Hadoop Distributed File System, Hadoop 分布式文件系统)是Hadoop框架的一个底层模块,Hadoop的其它部分组件,如针对分布式计算的编程模型Map/Reduce框架、用于存储结构化数据的非关系型数据库HBase等等,都是基于HDFS之上。该分布式文件系统具有高容错的特点,并且设计的初衷便是用来部署在廉价的硬件之上。HDFS可以提供高吞吐量的数据访问,这样一来,就非常适合用于处理海量数据集上的程序应用。
[0004]HDFS采用的是经典的主/从Master/Slave架构,在一个搭建了 HDFS的集群中,往往是由一个NameNode节点和一定数目的DataNodes节点组成的。NameNode是HDFS系统的核心,它是一个元数据服务器,用来管理文件系统中的命名空间以及处理客户端对文件系统的访问请问。采用单一的NameNode服务器,优点便是容易实现,并且可以简单有效的来管理元数据。但同时也暴露出HDFS系统的一个致命弱点,存在着一个SPOF(Single Point Of Failure)问题,即HDFS的中心服务器NameNode是单点的,它的崩溃,轻则使系统耗费数小时的时间重启,以至文件系统不可访问,重则丢失所有的文件数据。
[0005]Hadoop当时设计的初衷便是将其部署在廉价的机器之上的,硬件错误被当成一种常态而不是异常,因此由于NameNode服务器的硬件故障而导致整个分布式集群崩溃的可能性是存在的。除了上述不可控制的意外,在现实中,很多时候,节点的下线并非是这些不可控制的意外,而是一些有计划的关机或者软硬件的升级。对一些Hadoop实时应用来说,集群的不间断服务显得尤为重要。在Hadoop中,由于NameNode是一个关键节点,就需要对NameNode构建高可用方案。

【发明内容】

[0006]本发明的目的在于:鉴于现有方法存在的上述问题,提出了一个高可用的HDFS解决方案,解决HDFS中NameNode单点故障问题,在Active NameNode失效后,能够自动切换到Standby NameNode,接管Active NameNode之前的工作,对外提供服务,而无需人工干预。
[0007]本发明解决其技术问题的技术方案是:
1、元数据同步: 在文件系统中,文件和目录是文件系统的基本元素。在本发明中,将这些元素被抽象成INode,每一个文件或目录都对应一个唯一的INode,INode存储了名字信息(分别对应文件或目录的名字),创建时间、修改时间、父目录等信息,这些都是目录和文件的一些公共属性。有了 INode信息,就可以构建整个文件系统的层次结构,并保存每个文件或目录的属性信息,用户就可以对文件和目录进行创建、删除等操作。这些储存在内存中的INode信息即为内存元数据。
[0008]本发明提出一种元数据同步的机制来保持Standby NameNode与Active NameNode的名字空间的一致性。在这里,该机制分为两个步骤:
I) Standby NameNode冗余记录下Client发来的命令,于是在集群中也多了一份EditLog文件,提高了 EditLog的可靠性。
[0009]2) Active NameNode在它的EditLog命令数目超过一定阈值后,自动与StandbyNameNode 的 EditLog 进行同步。
[0010]2、失效备援:
I)失效检测
本发明采用心跳信息机制来检测Active NameNode是否失效。每个DataNode会向Active NameNode发送心跳信息,如果Active NameNode长时间未收到该DataNode发来的心跳信息,那么Active NameNode会认为此DataNode已经不可用,不再将新1请求转发到这些数据节点上,并将该DataNode标记为不可用。如果Active NameNode收到心跳信息,那么Active NameNode会对此心跳信息做出响应。该DataNode在收到Active NameNode发来的心跳响应信息后,等待一段时间t后继续发送心跳信息。如果该DataNode在超过时间t后未收到Active NameNode发来的响应信息,那么表明该Active NameNode已经失效,此时系统需要进行切换NameNode。
[0011]2)请求 Standby NameNode
DataNode在检测到Active NameNode失效之后,将该Active NameNode的状态标记为不可用。然后查询内存中的IpTable,找到Standby NameNode的Ip地址进行连接。如果连接成功,则向该Standby NameNode发送服务请求,Standby NameNode在收到该请求后,响应该服务请求。
[0012]3)接管集群
Standby NameNode在收到连接请求之后,将扫描EditLog文件,将EditLog中的所有命令操作与内存中元数据进行合并。导入完成之后,Standby NameNode便转入Active状态,成为新的Active NameNode,为集群提供服务。
[0013]本发明的有益效果:
1、本发明能够完全移除集群中的单点故障问题,即集群中任意一个节点失效均不影响集群的继续运行。
[0014]2、本发明通过在HDFS运行过程中周期性地同步两台NameNode的元数据,大大降低系统在切换时候所需要的时间。
[0015]3、本发明能够自动检测已经失效的NameNode,并自动切换到热备的NameNode,而无需人工切换。
【附图说明】
[0016]图1是本发明的总体架构图。
[0017]图2是本发明的失效切换流程图。
【具体实施方式】
[0018]下面结合附图和具体实施应用过程对本发明进一步说明:
参照图1总体架构图介绍本发明的实现细节:
在本发明中,NameNode是整个集群的中心节点,存储了整个文件系统的元数据。NameNode还负责维护整个名字空间,以及响应客户端的读写请求。DataNode则是一个存储了具体应用数据的节点。在HDFS中,系统将超过一定大小的文件分成一个个固定大小的数据块存储在DataNode上。并且通常这些数据块都有多个备份存储在不同的DataNode上面,以防DataNode的失效所导致数据块的不可用。
[0019]在NameNode中,为了访问性能,把所有的元数据都驻留在内存中。所以同DataNode相比,NameNode需要更多的内存。对文件系统的操作,如创建,读取和写入都是由DataNode根据NameNode所发来的指令完成。NameNode使用叫做EditLog的事务日志来记录每一个对文件系统元数据的改变,如在HDFS中创建一个新的文件,NameNode将会在EditLog中插入一条记录来记录这个改变。整个文件系统命名空间,包括文件块的映射表和文件系统的配置都存在一个叫FsImage的文件中。
[0020]在NameNode初始化过程中,NameNode将从磁盘中读取FsImage (文件系统镜像文件)文件,并应用到内存中,在内存中生成元数据。然后向集群中所有DataNode广播上线通知,表明该N
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1