Hadoop详解(五):HDFS HA 和 Federation

时间:2024-05-23 15:28:23

1. Hadoop 2.0 产生背景

  • Hadoop 1.0中HDFS和MapReduce在高可用、扩展性等方面存在问题
  • HDFS存在的问题
    • NameNode单点故障,难以应用于在线场景 HA
    • NameNode压力过大,且内存受限,影扩展性 Federation
  • MapReduce存在的问题响
    • JobTracker访问压力大,影响系统扩展性
    • 难以支持除MapReduce之外的计算框架,比如Spark、Storm等

2. Hadoop 1.x 和Hadoop 2.x

Hadoop详解(五):HDFS HA 和 Federation

Hadoop 2.x由HDFS、MapReduce和YARN三个分支构成:

  1. HDFS:NN Federation(联邦)、HA。2.X:只支持2个节点HA,3.0实现了一主多备
  2. MapReduce:运行在YARN上的MR;
    • 离线计算,基于磁盘I/O计算
  3. YARN,资源管理系统

2.1 HDFS 2.x

  • 解决HDFS 1.0中单点故障和内存受限问题。
  • 解决单点故障
    • HDFS HA:通过主备NameNode解决
    • 如果主NameNode发生故障,则切换到备NameNode上
  • 解决内存受限问题
    • HDFS Federation(联邦)
    • 水平扩展,支持多个NameNode;
    • (2)每个NameNode分管一部分目录;
    • (1)所有NameNode共享所有DataNode存储资源
  • 2.x仅是架构上发生了变化,使用方式不变
  • 对HDFS使用者透明
  • HDFS 1.x中的命令和API仍可以使用

3. HDFS 2.x Federation(联邦)

通过多个namenode/namespace把元数据的存储和管理分散到多个节点中,使到namenode/namespace可以通过增加机器来进行水平扩展。

能把单个namenode的负载分散到多个节点中,在HDFS数据规模较大的时候不会也降低HDFS的性能。可以通过多个namespace来隔离不同类型的应用,把不同类型应用的HDFS元数据的存储和管理分派到不同的namenode中。

Hadoop详解(五):HDFS HA 和 Federation

4. HDFS 2.x HA(高可用)

主备NameNode

Hadoop HA主要是解决NameNode单点故障问题,主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换。所有DataNode同时向两个NameNode汇报数据块信息(位置)。并且在Hadoop HA中还含有JNN集群用来存储共享存储状态(shared edits文件)。处于StandyBy节点的NameNode,主要作用是完成了edits.log文件的合并产生新的image,推送回给Active NameNode。该步骤和SecondaryNameNode的备份功能类似,通过这种方式保证了StandyBy节点的NameNode和Actvie NameNode的fsimage文件一致。edit文件通过JNN集群存储共享存储状态,active namenode处理所有的操作请求(读写),读写入到这个共享状态的集群节点。

HDFS HA保持NameNode元数据信息一致,也就是说保持fsimge和edits文件保持一致。fsimge和edits文件在HDFS 格式化之后产生。

Hadoop详解(五):HDFS HA 和 Federation

Hadoop的元数据主要作用是维护HDFS文件系统中文件和目录相关信息。元数据的存储形式主要有3类:内存镜像、磁盘镜像(FSImage)、日志(EditLog)。在Namenode启动时,会加载磁盘镜像到内存中以进行元数据的管理,存储在NameNode内存;磁盘镜像是某一时刻HDFS的元数据信息的快照,包含所有相关Datanode节点文件块映射关系和命名空间(Namespace)信息,存储在NameNode本地文件系统;日志文件记录client发起的每一次操作信息,即保存所有对文件系统的修改操作,用于定期和磁盘镜像合并成最新镜像,保证NameNode元数据信息的完整,存储在NameNode本地和共享存储系统(QJM)中。

4.1 共享存储(shared edits)

active namenode处理所有的操作请求(读写),standby namenode只同步状态datanode会同时向两个namenode发送block报告和心跳当满足一次checkpoint时,standby namenode进行一次合并操作active NN执行任何命名空间的修改都会持久化到一半以上的journalnodes上而Standby NN负责观察edits log的变化,它能够读取从JNs中读取edits信息,并更新其内部的命名空间一旦Active NN出现故障,Standby NN将会保证从JNs中读出了全部的Edits,然后切换成Active状态一次checkpoint过程

4.2 切换机制

  • 手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
  • 自动切换:基于Zookeeper实现

基于Zookeeper自动切换方案

  • ZooKeeper Failover Controller:监控NameNode健康状态,
  • 当NameNode启动时,会向Zookeeper注册NameNode
  • NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active