zoukankan      html  css  js  c++  java
  • HDFS的HA

    为什么要用集群

    在企业中主要使用集群

    在学习的过程中使用伪分布式即可,就是单点

    HDFS中的

    NN

    SNN

    DN

    YARN 的

    RM 老大

    NM

    每个组件只有一个即可

    如果nn挂了就不能再继续对外提供服务,例如客户端请求的读写,put get那些。

    为了解决这个问题,企业一般都会准备两台nn,对外提供服务的只有一台,处于active状态,另一台是standby状态,进行实时备份随时准备从standby状态切换到active状态

    同时,拥有两台nn基本上就不需要snn了,因为nn会进行实时备份,而snn只是进行合并备份的工作,一个小时checkpoint。如果用snn只能恢复checkpoint点的数据,如果中途挂掉,那中间那半小时的数据就会丢失。

    主从架构 master-slave
    比如hdfs读写请求都是先NN节点;
    但是:hbase 读写请求不是经过老大master

    命名空间:当我们有两台nn的时候分别为nn1和nn2,我们执行HDFS命令和我们只有一台nn进程有什么区别呢?

    hdfs dfs -ls /  这是我们在伪分布里执行的HDFS命令。当我们执行这个命令的时候,就会去core.site.xml和hdfs.site.xml两个配置文件里去寻找配置的信息,以便于找到服务器执行相应的命令。

    但是当我们有两个nn进程的时候上边的那个命令就不能这样执行了,要加上你要执行命令的服务器名称等等

    hdfs dfs -ls hdfs://ip:9000 / 这两个nn分别对应着两个ip,这里的ip是谁就通过哪个执行命令。但是在shell脚本或者代码之中,如果active的nn挂了,我们再执行命令的时候不可能再改代码改脚本,所以这里引出一个命名空间的概念,我们的脚本或者代码先连接命名空间,命名空间再去尝试连接active的nn,这个过程我们是无感知的。

    命名空间的工作流程,命名空间从客户端接到命令以后,会先尝试连接其中一台nn,这里我们就假设先连接nn2,发现nn2是standby状态,然后再去尝试连接nn1,发现是active状态,这时候nn1会接受请求并执行命令。

    - 流程
    - 1、客户端根据命名空间发起请求
    - 2、命名空间按照配置顺序寻找active节点
    - 3、NN1记录editlog并写入JN集群
    - 4、NN2节点实时读取JN集群的数据,并进行重演

    - 重点
    - 1、DN节点会向所有的NN节点汇报心跳状况
    - 2、ZKFC是单独的进程

    HDFA的 HA的架构部署

    环境准备  3台机器

    hadoop001:ZK NN ZKFC JN DN

    hadoop002:ZK NN ZKFC JN DN

    hadoop003:ZK JN DN

    每个组件的作用

     NN:fsimage editlog(读写请求记录)

    ZK(2n+1 奇数台):负责选举,决定active和standby在哪台节点

    ZKFC(zookeeperFailOverControl):节点真正挂掉,负责将standy状态的节点切换到active状态

    JN:同步editlog的进程

    ZK是一个单独的进程集群

    以下是企业ZK集群部署台数参考

    20台节点: 5台
    20~100台节点: 7/9/11台
    >100台节点: 11台
    但是: 不是说zk节点越多越好,因为zk节点越多做出选举的决策的时间就越长。

    几百台节点, zk部署的机器就它一个进程,这是为了提高选举效率

    HA出现的主要原因就是为了解决单点问题,监控状态自动备援

    通过jn共享状态

    ZKFC

    通过ZKFC切换nn的syandby状态到active状态

    ZKFC是一个单独的进程

    向ZK集群定期发送心跳,使得自己可以被选举

    监控NN的健康状态

    当自己被选为active的时候,ZKFC通过RPC协议调用使standby的节点切换为active状态,对外提供服务。这个过程是无感知的。

    DN

    同时向NN1和NN2发送心跳和块报告

    active的NN:

    操作记录写到自己的editlog

    同时把editlog里的内容写到JN集群里

    接收DN的心跳和块报告

    standby的NN

    接收JN的集群日志

    显示读取执行log操作(重演),使得自己的元数据和active的nn的数据保持一致

    也要接收DN的心跳和块报告。

  • 相关阅读:
    Java 字典
    java 集合
    Java Array类、大数据运算、包装类
    java String、StringBuilder 、正则表达式
    Java时间日期类 Date、DateFormat、Calendar类
    java包的声明、导入、System类
    java正则表达式
    java-StringBuffer类和StringBuilder类
    java-String类
    java的API,Object类,equals方法,toString方法
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10658323.html
Copyright © 2011-2022 走看看