摘自:https://www.cnblogs.com/tgzhu/p/5790565.html

hadoop2.X HA 原理:

hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解决思路和方案,示意图如下:

基本原理就是用2N+1台JN存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。当然这个算法所能容忍的是最多有N台机器挂掉,如果多于N台挂掉,这个算法就失效了。这个原理是基于Paxos算法。在HA架构里面SecondaryNameNode这个冷备角色已经不存在了,为了保持standby NN时时的与主Active NN的元数据保持一致,他们之间交互通过一系列守护的轻量级进程JournalNode。任何修改操作在 Active NN上执行时,JN进程同时也会记录修改log到至少半数以上的JN中,这时 Standby NN 监测到JN 里面的同步log发生变化了会读取 JN 里面的修改log,然后同步到自己的的目录镜像树里面,如下图:

当发生故障时,Active的 NN 挂掉后,Standby NN 会在它成为Active NN 前,读取所有的JN里面的修改日志,这样就能高可靠的保证与挂掉的NN的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。QJM方式来实现HA的主要优势:1、不需要配置额外的高共享存储,降低了复杂度和维护成本。2、消除spof。3、系统鲁棒性(Robust:健壮)的程度是可配置。4、JN不会因为其中一台的延迟而影响整体的延迟,而且也不会因为JN的数量增多而影响性能(因为NN向JN发送日志是并行的)。

datanode的fencing

   确保只有一个NN能命令DN:

1、每个NN改变状态的时候,向DN发送自己的状态和一个序列号。

2、DN在运行过程中维护此序列号,当failover时,新的NN在返回DN心跳时会返回自己的active状态和一个更大的序列号。DN接收到这个返回则认为该NN为新的active。

3、如果这时原来的active NN恢复,返回给DN的心跳信息包含active状态和原来的序列号,这时DN就会拒绝这个NN的命令。

客户端fencing:确保只有一个NN能响应客户端请求,让访问standby nn的客户端直接失败。在RPC层封装了一层,通过FailoverProxyProvider以重试的方式连接NN。通过若干次连接一个NN失败后尝试连接新的NN,对客户端的影响是重试的时候增加一定的延迟。客户端可以设置重试此时和时间。Hadoop提供了ZKFailoverController角色,部署在每个NameNode的节点上,作为一个deamon进程, 简称zkfc,示例图如下:

FailoverController主要包括三个组件:

1、HealthMonitor: 监控NameNode是否处于unavailable或unhealthy状态。当前通过RPC调用NN相应的方法完成。

2、ActiveStandbyElector: 管理和监控自己在ZK中的状态。

3、ZKFailoverController:它订阅HealthMonitor和ActiveStandbyElector的事件,并管理NameNode的状态。

  • ZKFailoverController主要职责:

    1、健康监测:周期性的向它监控的NN发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态。
    2、会话管理:如果NN是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,    当这个NN挂掉时,这个znode将会被删除,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
    3、当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN。
    4、master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态。

hadoop2.x Federation:

单Active NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NN进程使用的内存可能会达到上百G,NN成为了性能的瓶颈。常用的估算公式为1G对应1百万个块,按缺省块大小计算的话,大概是64T (这个估算比例是有比较大的富裕的,其实,即使是每个文件只有一个块,所有元数据信息也不会有1KB/block)。为了解决这个问题,Hadoop 2.x提供了HDFS Federation, 示意图如下:

多个NN共用一个集群里的存储资源,每个NN都可以单独对外提供服务。每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储。DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况。如果需要在客户端方便的访问若干个NN上的资源,可以使用客户端挂载表,把不同的目录映射到不同的NN,但NN上必须存在相应的目录。

转载于:https://www.cnblogs.com/java-oracle/p/8379331.html

Hadoop HA详解相关推荐

  1. Apache Hadoop版本详解

    由doop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼.本文总结了ApacheHadoop和Cloudera Hadoop的版本衍化过程,并给出了选择Hadoop版本的一些建议 ...

  2. 《Hadoop技术详解》一导读

    前 言 Hadoop技术详解 本书采用的约定 本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数 ...

  3. Hadoop Streaming详解

    一: Hadoop Streaming详解 1.Streaming的作用 Hadoop Streaming框架,最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行:m ...

  4. Hadoop日志详解

    文章目录 1 Hadoop日志详解 2 Hadoop 系统服务输出的日志 2.1 修改Hadoop系统服务日志目录(包括NameNode.secondarynamenode.datanode.reso ...

  5. hadoop生态圈详解

    1.hadoop架构及作用 (1)Common hadoop核心组件,基本jar包依赖,公共工具程序 (2)HDFS(Hadoop Distributed File System) 分布式文件系统,解 ...

  6. hadoop配置文件详解系列(二)-hdfs-site.xml篇

    上一篇介绍了core-site.xml的配置,本篇继续介绍hdfs-site.xml的配置. 属性名称 属性值 描述 hadoop.hdfs.configuration.version 1 配置文件的 ...

  7. hadoop SecondNamenode 详解

    SecondNamenode名字看起来很象是对第二个Namenode,要么与Namenode一样同时对外提供服务,要么相当于Namenode的HA. 真正的了解了SecondNamenode以后,才发 ...

  8. Hadoop2之NameNode HA详解

    在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameN ...

  9. Hadoop生态系统详解

    4.1 Hadoop生态系统 狭义的Hadoop VS 广义的Hadoop 广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个 ...

  10. Hadoop核心组件详解—HDFS、YARN、MapReduce

    Hadoop 是一个开源的分布式计算和存储框架,它的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持,相当于在某种程度上将多台计算机组织成 ...

最新文章

  1. java可以编写蠕虫病毒吗,暴力蠕虫来袭!网友们直呼:惊不惊喜,意不意外,怕不怕!...
  2. all any 或 此运算符后面必须跟_PHP程序员必须会的 45 个PHP 面试题(第一部分)...
  3. [云炬创业管理笔记]第一章测试4
  4. C的|、||、、、异或、~
  5. 《MySchool数据库设计优化》内部测试
  6. k means聚类算法_K-Means 聚类算法 20210108
  7. c语言2048代码linux,C语言2048小游戏课设(附源码).doc
  8. STM32标准库与HAL库中的Mode和Pull设置
  9. 图像处理(十三)LBP特征提取
  10. 多linux系统u盘制作,高手教你如何做一个U盘Linux系统
  11. Mariadb 安装教程 Windows版
  12. 《数字图像处理》:直方图处理的几种方式
  13. python用逗号隔开输出_c语言提取逗号隔开的 python输出用逗号隔开的数字
  14. cf 1324D. Pair of Topics
  15. php操作pdf文档输出,PHP生成PDF文档实用技巧
  16. 相关系数,互相关函数,协方差,卷积
  17. 58同城2021校招笔试——二叉树遍历
  18. 利用arcgis模拟制作水下地形
  19. Linux性能优化(十六)——中断绑定
  20. Auto CAD:CAD三维建模设计之常用工具(实体、曲面、网格)之详细攻略

热门文章

  1. 帮你免于失业的十大技术
  2. Mapx自带的工具的理解
  3. Cisco路由重分发配置(引入路由)
  4. 内大考研计算机专业课,2019计算机考研专业课核心考点梳理
  5. 可视化_数据可视化—地图可视化
  6. Unity子线程编程无法报错
  7. centos 安装指定版本的node
  8. 2018年英语计算机职称考试,2018年高级职称计算机考试内容介绍
  9. 51单片机原理知识点,复位时钟和时序(二)
  10. window下git的用户切换_Windows下Git的使用