Cloudera Hadoop大数据平台实战指南
上QQ阅读APP看书,第一时间看更新

4.3 HDFS 2.0新特性

4.3.1 HDFS HA

HDFS1.0中虽然存在一个第二名称节点(SecondaryNameNode),但第二名称节点无法提供“热备份”功能,一旦名称节点发生故障,系统需要停机恢复。HDFS2.0采用HA(High Availability)架构,用于解决NameNode单点故障问题。该HA特性通过热备份的方式为主NameNode提供一个备用者,一旦主NameNode出现故障,可以迅速切换至备用NameNode,从而实现不间断对外提供服务。

一个典型的HDFS HA架构如图4-4所示,它通常由两个NameNode组成:一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,比如处理来自客户端的请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。

注意,HA中的两个NameNode属于同一命名空间。两个NameNode为了能够实时同步元数据信息(实际上是共享EditLog),会通过一组称作JournalNodes的独立进程相互通信。

每个Journal节点暴露一个简单的RPC接口,允许NameNode读取和写入数据,数据存放在Journal节点的本地磁盘。当Active NameNode写入EditLog时,它向集群的所有JournalNode发送写入请求,当多数节点回复确认成功写入之后,EditLog就认为是成功写入。

StandbyNameNode负责监听,一旦发现有新数据写入,就读取这些数据,并加载到自己内存中,以保证自己内存状态与Active NameNode保持基本一致。

图4-4

Hadoop使用ZooKeeper支持自动故障转移,ZooKeeper的任务包括NameNode失败检测和NameNode选举。

HDFS HA集群的配置如下:

(1)NameNode机器:运行Active NameNode和Standby NameNode的机器配置应保持一样。

(2)当Active状态的NameNode宕机后,需要手动切换到Standby状态的NameNode来继续提供服务。如果要实现自动故障转移,必须依赖ZooKeeper。

(3)JournalNode机器:运行JournalNode的机器,这些守护进程比较轻量级,可以部署在其他服务器上。至少需要部署3个JournalNode节点,以便容忍一个节点故障。通常配置成奇数,例如总数为N,则可以容忍(N-1)/2台机器发生故障后不影响集群正常运行。

(4)配置了NameNode HA后,客户端可以通过HA的逻辑名称去访问数据,而不用指定某一台NameNode,当某一台NameNode失效自动切换后,客户端不必更改HDFS的连接地址,仍可通过逻辑名称去访问。

需要注意的是,Standby NameNode同时完成了原来SecondaryNameNode的checkpoint(检查点)功能,因此不需要再独立部署SecondaryNameNode。

4.3.2 HDFS Federation

HDFS1.0的单NameNode设计不仅存在单点故障问题,还存在可扩展性和性能问题。只有一个NameNode,不利于水平扩展。HDFS Federation(HDFS联邦)特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源。每个NameNode是独立的,不需要和其他NameNode协调合作。

如图4-5所示,Federation使用了多个独立的NameNode/NameSpace命名空间。这些NameNode之间是联合的,也就是说,它们之间相互独立且不需要互相协调,各自分工管理自己的区域。分布式的DataNode被用作通用的数据块存储设备。每个DataNode要向集群中所有的NameNode注册,且周期性地向所有NameNode发送心跳和块报告,并执行来自所有NameNode的命令。每一个DataNode作为统一的块存储设备被所有NameNode节点使用。

每一个DataNode节点都在所有的NameNode进行注册。DataNode发送心跳信息、块报告到所有NameNode,同时执行所有NameNode发来的命令。

图4-5