当前位置:   article > 正文

YARN、HA_yarn ha

yarn ha
目录
# 1、Hadoop YARN
	介绍:集群资源管理 任务调度
	3大组件 架构
	程序在yarn运行流程:以mr程序提交为例
	yarn调度器
    
# 2、Hadoop HA集群
	高可用概念:持续可用 一直可用
		解决单点故障问题  主备集群
	Hadoop HDFS HA实现方案--QJM、YARN HA
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

一、Apache Hadoop YARN
1.1、YARN的概述
  • yarn是一个通用资源管理系统调度平台

    通用: 也就是哪怕不是Hadoop中的组件,通过一定的规则接入yarn集群,也可以进行资源的申请和使用.

    例如: spark, flink, sqoop…

    资源指的跟程序运行相关的硬件资源  比如:CPU RAM 
    由于Yarn的出现,让Hadoop不再是单一的软件平台,而是一个通用的大数据生态.
    
    • 1
    • 2

    思考: Yarn为什么能够通用?

    1. Yarn不需要考虑任务具体怎么做,只需要分配资源即可
    2. 所有的使用Yarn进行资源调度的任务,只要满足Yarn的资源申请机制,就可以获取资源并执行
    3. 任务的执行逻辑,由任务所使用的框架进行编写和管理,无需向Yarn中提交,也无需遵循特定的规则
    4. Yarn可以分配的资源有 内存和cpu
1.2、YARN组件–3大组件
  • 物理层面上-2个组件

    • 主角色 resourcemanager (RM)

      ResourceManager 负责整个集群的资源管理和分配,是一个全局的资源管理系统。
      是程序申请资源的唯一入口 负载调度。
      
      nodemanager会向resourcemanager中汇报自己所在服务器的资源状况,当接收到资源请求时,resourcemanager会根据资源使用情况从nodemanager 中挑选合适的服务执行任务.
      
      • 1
      • 2
      • 3
      • 4
    • 从角色 nodemanager (NM)

      nodemanager 负责每台机器上具体的资源管理 负责启动 关闭container容器
      
      容器: 在yarn集群中,nodemanager 会将自己所在服务器的资源(内存,cpu)预先拆分为大小不同的容器
      例如: 一个服务中内存 4G  cpu核心 4个  拆分为三个容器  
      容器1: 1G 1核  
      容器2: 1G 1核
      容器3: 2G 2核
      
      容器与容器之间的资源不共享,也就是在第一个容器中执行的任务,不会收到第二个容器中任务的影响.
      # 1. 如果申请的资源是10M 此时会分配给他哪个容器????
      容器1 和 容器2 均可
      # 2. 如果申请的资源是3G 此时会分配给他哪个容器????
      此时系统会将容器1 和容器3合并将合并后的容器分配给该任务
      # 3. 如果申请的资源是5G 此时会怎样???
      直接报错
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
  • 程序内部–1个组件

    • ApplicationMaster AM (AM不是集群,而是在nodemanager启动的容器中运行的一个程序)

      yarn集群不关心任务具体的执行逻辑,此时就由ApplicationMaster去进行管理,监控和执行

      ApplicationMaster是怎么创建出来的?

      1. 编写依托于Yarn的计算程序(申请资源, 创建AM, 计算逻辑)的时候,需要按照Yarn的规则来编写申请资源的代码
      2. Yarn中申请资源的规则中,就需要实现ApplicationMaster,此时Application就是一串代码
      3. 当任务向Yarn中成功申请到资源后,会由指定的NodeManager在容器中运行AM的相关代码
      4. AM向RM申请资源运行计算逻辑代码,在运行过程中,进度,异常,资源使用全程由AM负责管理.
    yarn作为通用资源管理系统 不关心程序的种类和程序内部的执行情况?
    
    谁来关心程序内部执行情况?
    比如MapReduce程序来说,先maptask 再运行reducetask.
    
    需要一个组件来管理程序执行情况  程序内部的资源申请 各阶段执行情况的监督
    
    #为了解决这个问题 yarn提供了第三个组件 applicationmaster 
    (男)主人,雇主; 主宰; 主人; 有控制力的人; 能手; 擅长…者;
    
    #把applicationmaster称之为程序内部的老大角色 负责程序内部的执行情况
    
    #AM针对不同类型的程序有不同的具体实现
    yarn默认实现了MapReduce的AM  名字叫做MrAppMaster.
    其他软件比如spark flink需要实现自己的AM 才能在yarn运行。
    
    
    #结论:在上述设计模式下  任何种类程序在yarn运行,首先都是申请资源运行AM角色,然后由AM控制程序内部具体的执行。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
1.3、client提交程序到yarn运行流程

计算程序运行过程中, ApplicationMaster与哪些服务建立了通信关系?

  1. 与ResourceManager建立心跳关系,并申请资源
  2. 与NodeManager建立联系,初始化容器
  3. 与Clinet建立联系,实时汇报任务进度

整个执行过程,申请了几次资源?(2次)

第一次Client向RM申请资源: 启动AM程序

第二次AM向RM申请资源: 执行计算任务

在这里插入图片描述

在这里插入图片描述

问题: 根据谁上述图解,Yarn只能给MR分配资源么?

上述内容只是以MR任务为例进行了处理.我也可以执行其他的任务

在这里插入图片描述

1.4、YARN schduler(调度)
  • 所谓的调度器指的是当集群繁忙的时候 如何给申请资源的程序分配资源

    如果资源充足,则不需要资源分配规则,直接每个人拿满就可以了.

  • scheduler属于ResourceManager功能

    资源调度器(scheduler),决定了资源不足时,哪个任务占用资源多,哪个任务占用资源少

    哪个任务先执行,哪个任务后执行

  • YARN3大调度策略

    • FIFO Scheduler 先进先出策略

      • 缺点: 同一时间只有一个任务可以被执行

    在这里插入图片描述

    • capacity Scheduler 容量调度策略

在这里插入图片描述

容量调度,就是将资源划分为几个队列,每个队列占用的资源比例不同

多个队列间,可以实现并行,同时执行对应的操作

单个队列中是先进先出策略

Apache版本的调度策略默认是capacity

​ 优点: 可以实现多任务同时执行,且任务间不会挤占对方的资源

​ 缺点: 如果1队列资源紧缺,2队列资源空闲,无法互相协调使用资源,造成资源浪费.

  • Fair Sheduler 公平调度策略

在这里插入图片描述

公平调度,就是每一个任务运行时,平分当前的现有资源,如果程序执行完成后,将资源归还由剩余的任务平分

公平调度时CDH版本的Hadoop默认的调度模式

​ 优点: 最大限度的使用资源,资源不浪费

​ 缺点: 任务间没有权重,占用资源比例相同.

  • Apache Hadoop版本默认策略是capacity 。CDH商业版本默认策略是Fair。

    • 默认情况下,整个yarn集群在capacity策略下,划分为一个队列 名字叫做default,占整个集群资源的100.

    在配置端口下可以查看yarn使用的调度策略和队列详情

在这里插入图片描述

  • 决定调度策略的参数

    #yarn-site.xml
    
    yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    
    #还可以在yarn 8088页面查看
    
    • 1
    • 2
    • 3
    • 4
    • 5

二、Hadoop HA集群
  • HA叫做高可用模式 注意解决的是单点故障问题。 SPOF

    什么是单点故障?

    就是一个服务或者一个服务器的故障,将导致整个集群的无法使用,那么这个服务,或者这个服务器就是单点故障.

  • Hadoop中单点故障

    • NameNode: 元数据都存储在NameNode中,如果NameNode宕机,则HDFS集群不可用
    • Resourcemanager: 所有的资源申请,都需要通过RM进行,如果RM故障,则Yarn集群不可用

** 解决单点故障,使用的是主(Active)备(Standby)方案,那么对备用机有什么要求呢?**

性能: standby节点的性能尽量和Active节点相同或相似,满足集群的基本使用要求

功能: Active节点具备的功能, Standby节点必须全部具备.

数据: Active节点中的数据内容,和Standby节点中的数据要时刻同步,保证数据完全一致.

  • NameNode HA —QJM共享日志集群方案

在这里插入图片描述

  • jn集群 editslog编辑日志同步
    • 为什么要使用集群进行数据同步??? 如果使用单机服务备份数据,该服务将成为新的单点故障
    • jn的数据同步流程
        1. 如果Active节点进行事务型操作,就会将exitlog写入JN集群中
        2. 如果JN集群成功服务过半则修改成功
        3. Standby监控JN集群的数据变化情况,如果存在修改的log文件,则备份到Standby中
        4. 当Active宕机后, Standby将读取JN中所有未备份的数据,合并元数据, 进行主备切换.
  • zkfc 实现主备切换避免脑裂

思考: 如果容错控制器说NN宕机了,但是NN正在正常运行会怎样???

如果zkfc说NN挂了,没挂也挂了,如果真的没挂, 补刀. 这样的操作可以避免脑裂现象

思考2: 什么是脑裂现象?

在主备切换时, 一个集群中有两个Active状态的NameNode,或者没有NameNode都是脑裂.

zkfc的三个功能:

  1. 监控和记录NN的健康状况
  2. 监控zk节点,记录当前的NN是Active节点还是Standby节点
  3. 在zk中创建节点,并且保持会话(会话中断节点消失), 如果创建失败则注册监听.
HA集群的运行状态

在这里插入图片描述

主备切换流程

在这里插入图片描述

  • Resourcemanager HA --基于zk实现

    • RM需要维护的数据量很少 不像NN需要同步文件系统大量的元数据。直接基于zk即可完成
    • 别忘了 zk也是一个分布式小文件存储系统。(每个Znode节点的存储空间最大为1M)
      • 资源使用情况和NodeManager的信息可以通过NM的心跳包重构,所以不需要备份
      • 需要备份的是ApplicationMaster的相关信息(ApplicationMaster的启动位置,时间,容器状态等…)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/852316?site
推荐阅读
相关标签
  

闽ICP备14008679号