Hadoop——HDFS HA与联邦原理

本节目标:

1.了解Hadoop1.0的局限与不足

2.掌握HDFS  2.0 的新特性

1 Hadoop的局限与不足

Hadoop1.0的核心组件MR和HDFS主要有几个不足:

(1)   抽象层次低。对于简单的功能,编写大量的代码。

(2)   表达能力有限。MR把复杂分布式编程工作高度抽象到两个函数上,即Map和Reduce上,实际生产环境中有些不能只用简单的两个函数完成。

(3)   要管理作业间复杂的依赖关系。实际应用通常需要大量的job协作完成,job之间往往存在复杂的依赖关系。

(4)   迭代效率低。对于需要迭代的任务,需要反复读写HDFS文件中的数据,大大降低了迭代效率。

(5)   资源浪费。Reduce任务需要等待所有Map任务完成后才开始。

(6)   实时性差。适用于离线批处理。

2 从1.0到2.0的改进


3 HDFS2.0新特性

主要是HDFS HA和HDFS联邦两个新特性。

3.1 HDFS HA

对于分布式文件系统HDFS ,NN是系统的核心节点,存储了各类元数据信息,并负责管理文件系统的命名空间和客户端对文件的访问。但是,在HDFS1.0中,只存在一个NN,一旦发生“单点故障”,就会导致整个系统失效。虽然有个SNN,但是它并不是NN的热备份,SNN主要功能在于周期性的从NN中获取FsImage和EditLog,进行合并后再发送给NN,替换掉原来的FsImage,以防止EditLog文件过大,导致NN失败恢复时消耗太多时间。合并后的FsImage在SNN中也保存一份,当NN失效时,可以利用SNN中的FsImage进行恢复。

由于SNN无法提供“热备份”功能,在NN发生故障时,无法立即切换到SNN对外提供服务,仍需要停机恢复。HDFS2.0采用了HA(High Availability)架构。在HA集群中,一般设置两个NN,其中一个处于“活跃(Active)”状态,另一个处于“待命(Standby)”状态。处于Active状态的NN负责对外处理所有客户端的请求,处于Standby状态的NN作为热备份节点,保存了足够多的元数据,在Active节点发生故障时,立即切换到活跃状态对外提供服务。

由于Standby NN是Active NN的“热备份”,因此Active NN的状态信息必须实时同步到StandbyNN。针对状态同步,可以借助一个共享存储系统来实现,如NFS(NetworkFile System)、QJM(Quorum Journal Manager)或者Zookeeper。Active NN将更新数据写入到共享存储系统,Standby NN会一直监听该系统,一旦发现有新的写入,就立即从公共存储系统中读取这些数据并加载到自己内存中,从而保证与Active NN状态一致。

此外,NN保存了数据块到实际存储位置的映射信息,即每个数据块是由哪个DN存储的。当一个DN加入到集群中时,它会把自己所包含的数据块列表给NN,定期通过心跳方式,以确保NN中的块映射是最新的。因此,为了实现故障时的快速切换,必须保证StandbyNN中也包含最新的块映射信息,为此需要给DN配置Active和Standby两个NN的地址,把块的位置和心跳信息同时发送到两个NN上。为了防止出现“两个管家”现象,还要保证在任何时刻都只有一个NN处于Active状态,需要Zookeeper实现。

3.2 HDFS联邦

虽然HDFS HA解决了“单点故障”问题,但是在系统扩展性、整体性能和隔离性方面仍然存在问题。

(1)   系统扩展性方面,元数据存储在NN内存中,受内存上限的制约。

(2)   整体性能方面,吞吐量受单个NN的影响。

(3)   隔离性方面,一个程序可能会影响其他运行的程序,如一个程序消耗过多资源导致其他程序无法顺利运行。HDFS HA本质上还是单名称节点。

HDFS联邦可以解决以上三个方面问题。

在HDFS联邦中,设计了多个相互独立的NN,使得HDFS的命名服务能够水平扩展,这些NN分别进行各自命名空间和块的管理,不需要彼此协调。每个DN要向集群中所有的NN注册,并周期性的发送心跳信息和块信息,报告自己的状态。

HDFS联邦拥有多个独立的命名空间,其中,每一个命名空间管理属于自己的一组块,这些属于同一个命名空间的块组成一个“块池”。每个DN会为多个块池提供块的存储,块池中的各个块实际上是存储在不同DN中的。









猜你喜欢

转载自blog.csdn.net/ym01213/article/details/80037502