Hadoop之HDFS HA架构剖析

1.命名空间:namespace

 

在伪分布式中hadoop的访问地址是 hdfs://ip:9000/ 。ip是NN节点所在的地址。但是在HA中NN 的ip是多个的此时,若NN发生切换生产中的,我们原有的程序难道需要重新编写?这时提供了命名空间的概念,客户端通过hdfs://namespace:9000/ 访问hdfs,无需关注具体访问的NN地址,用户无感知。

注意1、namespace不是进程,而是配置映射。

2、客户端通过包含namespace的请求去寻找active状态的机器进行通信,n。

2.HDFS HA架构图

        

 注意:1、zk机器不是部署的越多越好,机器数20~100节点,zk数5/7/9/11台
     2、若机器数大于100台,zk组件独占物理机,不要部署别的进程
    3、zk、JN节点数生产约定是奇数个,因为他们的规则都是大于二分之一的节点是才算成功,如4台和3台机器的zk集群,挂一台都可用,挂2台都不可用,多部署一台反而是浪费资源,其次向zk、jn中写数据也是,写成功二分之一以上以及才算成功写入 
   4、NN standby节点有时不能切换active,很大时ZK选举夯住的原因
   5、ZKFC进程数和NN数是一致的
   6、JN部署数量和HDFS的请求量以及数据量有关,一般5/7/9
   7、JN、ZK数据副本数就是集群节点数,故JN以及ZK集群数不能太高

 

3.HDFS HA架构详解

   

  HA是为了解决单点问题、通过JN集群共享数据,同步状态、通过ZKFC选举active、监控状态,自动备援。

DN: 同时向NN1 NN2发送心跳和块报告。
  块报告间隔时间:dfs.blockreport.intervalMsec=21600000  #默认是6小时
  块扫描间隔时间:dfs.datanode.directoryscan.interval=21600 #默认是6小时
  心跳:dfs.heartbeat.interval=3   #默认心跳间隔时间,3秒
  DN dead: timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
  #heartbeat.recheck.interval 默认是5分钟,但是该配置2.6.0中未找到

ACTIVE NN: 操作记录写到自己的editlog、同时写一份到JN集群
      接收DN的心跳和块报告
      接收客户端的请求

STANDBY NN: 同时接收JN集群的日志,读取editlog日志并显示执行editlog中的操作(重演),使得自己的元数据和active nn节点保持一致。
        接收DN的心跳和块报告

JounalNode: 用于active standby nn节点的同步数据
       一般部署2n+1

ZKFC: 单独的进程 zookeeper fail over control
   监控NN监控健康状态
   向zk集群定期发送心跳,使得自己可以被选举;
   当自己被zk选举为active的时候,zkfc进程通过RPC协议调用使NN节点的状态变为active, 对外提供实时服务,是无感知的。

扩展1:hdfs读写请求都是要经过NN,但是HBase不是这样的,客户端的读写是直接与RS进行通信,无需先通过HMaster。

猜你喜欢

转载自blog.csdn.net/qq_32641659/article/details/88964464