主页 > 新闻资讯 > 大数据开发-HDFS(HA)

大数据开发-HDFS(HA)

作者:游老师 浏览次数: 2021-04-20 14:00
昨天结束了zookeeper的学习,今天就给大家带来“大数据开发-HDFS(HA)”,大家不要感到奇怪,HDFS讲了那么多章怎么还没讲完,因为HDFS是大数据开发的一个重要知识点,含有很多的内容,也因此时间花费要多一些。下面就开始HDFS(HA)的学习。
HDFS的高可用(HA)也被称之为联邦HDFS,因为单个namenode在HDFS集群中可能发生单节点故障,一旦节点不可用,那么整个HDFS集群就会处于不可用状态。Hadoop2.0之前,NameNode是单个集群的故障点,NameNode作为集群首脑,存放着集群中所有的元数据,一旦节点出错,将导致整个集群不可用。为了解决这个问题,HA(高可用)就被引入了。
在一个典型的HDFS HA场景中,通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
为了能够实时同步Active和Standby两个NameNode的元数据信息(实际上editlog),需提供一个共享存储系统,可以是NFS、QJM(Quorum Journal Manager)或者Bookeeper,Active Namenode将数据写入共享存储系统,而Standby监听该系统,一旦发现有新数据写入,则读取这些数据,并加载到自己内存中,以保证自己内存状态与Active NameNode保持基本一致,如此这般,在紧急情况下standby便可快速切为active namenode。

一、Hadoop 系统架构
1.1 Hadoop1.x和Hadoop2.x 架构
在介绍HA之前,我们先来看下Hadoop的系统架构,这对于理解HA是至关重要的,Hadoop
1. x之前,其官方架构如图1所示:
 
从图中可看出,1.x版本之前只有一个Namenode,所有元数据由惟一的Namenode负责管理,可想而之当这个NameNode挂掉时整个集群基本也就不可用。
Hadoop 2.x的架构与1.x有什么区别呢。我们来看下2.x的架构:
 
2.x版本中,HDFS架构解决了单点故障问题,即引入双NameNode架构,同时借助共享存储系统来进行元数据的同步,共享存储系统类型一般有几类,如:Shared
NAS+NFS、BookKeeper、BackupNode 和 Quorum Journal
Manager(QJM),上图中用的是QJM作为共享存储组件,通过搭建奇数结点的JournalNode实现主备NameNode元数据操作信息同步。

二、HA中的角色如下
1.ZKFC
ZKFC即ZKFailoverController,作为独立进程存在,负责控制NameNode的主备切换,ZKFC会监测NameNode的健康状况,当发现Active NameNode出现异常时会通过Zookeeper集群进行一次主备选举,完成Active和Standby状态的切换;
2.HealthMonitor
定时调用NameNode的HAServiceProtocol RPC接口(monitorHealth和getServiceStatus),监控NameNode的健康状态并向ZKFC反馈;
3.ActiveStandbyElector
接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFC的主备切换方法对NameNode进行Active和Standby状态的切换;
4.JouranlNode集群
共享存储系统,负责存储HDFS的元数据,Active NameNode(写入)和Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务。
三、为什么要Namenode HA?
Hadoop0.23.2版本之前, NameNode是HDFS集群的单点故障点,每一个集群只有一个NameNode,如果这个机器或进程不可用,整个集群就无法使用,直到重启NameNode或者新启动一个NameNode节点。影响HDFS集群不可用主要包括以下两种情况:
1)第一种情况是如机器宕机这样的意外情况,将导致集群不可用,只有在重启NameNode之后才可使用。
2)第二种情况是计划内的软件或硬件升级(NameNode节点),将导致集群在短时间范围内不可用。

四、Namenode HA 实现
1.数据同步问题
如何保持主和备NameNode的状态同步,并让Standby在Active挂掉后迅速提供服务,namenode启动比较耗时,包括加载fsimage和editlog(获取file to block信息),处理所有datanode第一次blockreport(获取block to datanode信息),保持NN的状态同步,需要这两部分信息同步。
2.防止脑裂
指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
3.NameNode切换对外透明
主Namenode切换到另外一台机器时,不应该导致正在连接的客户端失败,主要包括Client,Datanode与NameNode的链接。
以上就是本期的所有内容了,HDFS作为大数据开发的一个重难点,需要许多的知识点需要学习,花费的时间也会更多,希望大家认真的将这一个知识点学完。
希望大家点个关注,及时收取最新文章推送,想了解更多敬请咨询加米谷大数据。
有问题的欢迎在评论区留言,如有侵权请告知。
热点排行
推荐文章
立即申请>>