Hadoop2.x之HDFS HA Federation

来源:互联网 发布:mac桌面不显示文件 编辑:程序博客网 时间:2024/05/01 05:28
一:前言
    在hadoop1.x中,存在一些问题,一个是单点故障问题,另外一个是NameNode内存受限问题,因此为解决这些问题,第二代hadoop相对与第一代,就改进了相关的问题.在HDFS中加入两个新特性,分别是HA(high availability),和federation.而MapReduce则是加入了yarn(资源管理系统).
    HA是为了解决单点问题.而Federation是解决内存受限问题.
    本文将详细讲解hadoop2.x的HA


二:单点问题
    在1.x版本中,NameNode工作负荷压力一直很大,而且一旦NameNode挂掉后,重新使用SecondaryNameNode进行恢复是需要一段时间的,而且NameNode挂掉的瞬间,可能有数据进行读写,此时,这部分数据就会丢失,造成影响.

三:HA
   首先来看HA的详细图解.
        
       接着介绍HA几个重要的部件
       1:NameNode(Active),这是活动的NameNode,是真正工作的NameNode
       2:NameNode(Standby),这是备份的NameNode,一旦活动的NameNode挂掉,可以立刻随时使用,因为其是每时每刻都与活动的NameNode同步.
       3:DataNode,负责储存数据文件
       4:JournalNode,储存元数据文件
       5:failoverContriller,控制NameNode,进行NameNode的切换,会对NameNode和ZK进行心跳检查
 
  为解决元数据实时同步问题,储存元数据可以使用两种方式,一种是Quorum Journal Manager,另一种是Network File System(NFS)
  具体工作过程:
  DataNode会向每个NameNode汇报自己的块信息,使得每个NameNode都实时掌握Block to DataNode信息,而当Actice的NN有活动操作时,会立刻想QJM系统写入操作日志,而StandBy的NameNode则会不断向QJM获取editlog来更新自己,使得与Actice的NameNode实现同步,
    只有活动的NameNode可以想QJM中写入操作日志,因为如果两个NameNode同时都对QJM操作,可能会导致数据有一定的损坏.
    当Active挂掉后,FailoverController就会通过zk的投票选出新的NameNode,并使其为Active,选中的NameNode会想QJM获取完需要的日志文件,之后就能启动为新的ActiveNameNode,从而HA.

四:Federation
      先来看一幅图.这是federation的架构图
          
        federation指的是可以使用多个与具备HA的NameNode搭建在相同的DataNode环境下,这些NameNode之间相互独立,不会受到影响,因此解决了Name内存不足而导致的任务量少的问题.
       为了水平扩展namenode,federation使用了多个独立的namenode/namespace。这些namenode之间是联合的,也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。分布式的datanode被用作通用的数据块存储存储设备。每个datanode要向集群中所有的namenode注册,且周期性地向所有namenode发送心跳和块报告,并执行来自所有namenode的命令。
        一个block pool由属于同一个namespace的数据块组成,每个datanode可能会存储集群中所有block pool的数据块。
        每个block pool内部自治,也就是说各自管理各自的block,不会与其他block pool交流。一个namenode挂掉了,不会影响其他namenode。
        某个namenode上的namespace和它对应的block pool一起被称为namespace volume。它是管理的基本单位。当一个namenode/nodespace被删除后,其所有datanode上对应的block pool也会被删除。当集群升级时,每个namespace volume作为一个基本单元进行升级






    















0 0