博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

hadoop2.X HDFS HA原理

Posted on 2017-02-08 09:40  来碗酸梅汤  阅读(131)  评论(0编辑  收藏  举报

此处是本人对官方文档的理解,如有不足请指正(官方文档位置在下图)

HDFS存在的问题

  NameNode单点故障,难以应用于在线场景
  NameNode压力过大,且内存受限,影响系统扩展性

解决HDFS 1.0中单点故障和内存受限问题。

解决单点故障

  HDFS HA:通过主备NameNode解决
  如果主NameNode发生故障,则切换到备NameNode上

 解决内存受限问题

  HDFS Federation(联邦)
  水平扩展,支持多个NameNode;
  每个NameNode分管一部分目录;
  所有NameNode共享所有DataNode存储资


hadoopHA架构图

对于本架构的理解

DN -> datanode  namenode 汇报心跳信息和block的位置信息

NN ->(大于等于2个) 只有一个是active状态,其余的是standby状态,要想实现高可用,所有的NN中的元数据必须是一模一样的,这样在active与standby之间切换时才不会丢失数据

    因为NN中的元数据是由fsimage和edits文件组成的,要保证高可用,所有的NN中的fsimage和edits必须是一模一样的

    fsimage  是在hdfs格式化(-format)时,即初始化时,产生的。所有要使得所有NN中fsimage一样,需要将 -format 后的fsimage文件拷贝到其余的NN中。

    edits    文件时用户进行读写操作是产生的。

          因为NN中active状态的只有一个。所以只有active的NN能够产生edits文件。所以要想使所有NN都具有edits文件,active的NN就必须将edits文件共享出来

          因为secondaryNameNode 一小时执行一次fsimage与edits文件的合并,且不能共享edits。所以hadoop2.X中高可用不使用secondarynamenode。

          使用JN (JournalNode)进行edits的共享。JN是通过RPC协议进行共享的。(linux下文件共享 DFS)

JN(JournalNode) -> 作用是,共享edits并且合并fsimage文件。

failoverController -> 用来对NN的状态进行监控。切换NN的状态,控制NN向ZK发送心跳数据

           ZK内部通过选举机制判定哪一个NN应该是Active
           所以控制的检查NN状态的是FC,每个NN对应一个FC。若有5个NN则有5个FC

ZK(zookeeper) -> 是为NN做 协同服务 的,当active的NN崩溃后,通过选举算法选举一个standby的NN替换店active的NN。