Yarn 的深入了解,深入浅出,面试必备(Hadoop的三部曲——下)

1. Yarn 的介绍

YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度,提供运算所需的资源(内存、cpu)。

  1. yarn 并不清楚用户提交的程序的运行机制
  2. yarn 只提供运算资源的调度(用户程序向 yarn 申请资源,yarn 就负责分配资源)
  3. yarn 与运行的用户程序完全解耦,意味着 yarn 上可以运行各种类型的分布式运算程序
  4. yarn 成为一个通用的资源调度平台,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享
  5. yarn 中的主管角色叫 ResourceManager
  6. yarn 中具体提供运算资源的角色叫 NodeManager

2. Yarn 的三大组件

在这里插入图片描述

2.1 ResourceManager

  1. 负责整个分布式集群的资源管理和分配,是全局的资源管理系统
  2. YARN Scheduler 根据 application 的请求为其分配资源不负责 application job 的监控、追踪、运行状态反馈、启动等工作。
  3. NodeManager 通过心跳机制向 ResourceManager 汇报资源使用情况(主要是 CPU 和内存的使用情况)。RM 只接受 NodeManager的资源汇报信息,对于具体的资源处理NodeManager自己处理。

2.2 NodeManager

  1. 单个节点上的资源管理系统,它是管理这台机器的代理。负责该节点程序运行,以及该节点资源的管理和监控,Yarn 集群每个节点都运行一个NodeManager。
  2. 定时向 ResourceManager 汇报节点资源(CPU、内存)的使用情况Container 的运行状态当 ResourceManager 宕机时自动连接 RM 备用节点。
  3. 接收并处理来自 ApplicationMaster的 Container 启动、停止等各种请求

2.3 AppMaster

  1. 用户提交的每个应用程序包含一个AppMaster ,它可以运行在 ResourceManager以外的机器上。
  2. 负责与 ResourceManager调度器协商以获取资源(用 Container 表示【core,内存】)。
  3. 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
  4. 与 NodeManager通信以启动/停止任务。
  5. 将得到的任务进一步分配给内部的任务(资源的二次分配)。

3. Yarn 的运行流程

在这里插入图片描述

4. Yarn 调度器 Scheduler

Scheduler:在Yarn中负责给应用分配资源

4.1 FIFO Scheduler

先进先出调度器: 把应用按提交的顺序排成一个先进先出队列,进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配。
在这里插入图片描述

4.2 Capacity Scheduler

容量调度器: 允许多个组织共享整个集群,每个组织分配专门的队列,每个队列分配一定的集群资源,因此每个组织可以获得集群的一部分计算能力。整个集群可以通过设置多个队列的方式给多个组织提供服务。队列内部垂直划分,一个组织内部的多个成员共享这个队列资源,队列内部,资源的调度是采用的是先进先出(FIFO)策略。
在这里插入图片描述

4.3 Fair Scheduler

公平调度器: 在Fair调度器中,不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态调整系统资源。如下图,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
在这里插入图片描述

从第二个任务提交到获得资源会有一定的延迟,需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。

5. Hadoop High Availability(高可用)

高可用(HA),是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,分为活动节点(Active)及备用节点(Standby)。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即替代活动节点来执行业务,从而实现业务的不中断或短暂中断。

5.1 Namenode HA

NameNode如果出现故障,会影响整个hdfs集群的使用,叫做单点故障问题。NameNode高可用就是为了解决这个问题。

基本原理:用2N+1台 JournalNode 存储EditLog,每次写操作有>=N+1返回成功时即认为写成功,数据不会丢失了。这个算法最多能容忍有N台机器挂掉,如果多于N台挂掉,这个算法就失效了。这个原理是基于Paxos算法

在HA架构里SecondaryNameNode已经不存在了,为了保持Standby NameNode时时的与Active NameNode的元数据保持一致,他们之间交互通过JournalNode进行操作同步。

在这里插入图片描述

  1. 当集群启动时,2个NameNode会在Zookeeper上抢临时节点,注册为Active NameNode
  2. 当第一个NameNode注册成功后,后续的NameNode只能为Standby NameNode
  3. 任何修改操作在 Active NameNode上执行时,至少半数以上的JournalNode进程会同时记录修改log,才算执行成功
  4. Standby NameNode 监测到JournalNode里面的同步log发生变化了,会读取 JournalNode里面的修改log,同步到自己的目录镜像树里
  5. Standby NameNode 会监听 Active NameNode在Zookeeper上注册的临时节点,当Active NameNode 出现故障后,临时节点会消失
  6. 当Standby NameNode 监听到Active NameNode的注册的临时节点消失时,会读取所有的JournalNode里的修改日志,确保与挂掉的NameNode 的目录镜像树一致,然后代替NameNode
  7. Standby NameNode向DataNode发送自己的状态和一个更大的序列号,DataNode会保存这个序列号,至此Standby NameNode正式成为Active NameNode
  8. 原来的NameNode故障修复后,会返回给DataNode的心跳信息包含active状态和原来的序列号
  9. DataNode需要确保同一时间有且只有一个NameNode 能命令DataNode,由于故障恢复后的NameNode返回的序列号比自己保存的序列号小,DataNode会拒绝这个NameNode的命令
  10. 故障修复后的NameNode,变成了Standby NameNode

5.2 Failover Controller

HA 模式下,会将 FailoverController部署在每个 NameNode的节点上,作为一个单独的进程用来监视 NameNode的健康状态。

FailoverController主要包括三个组件:

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

  2. ActiveStandbyElector: 监控 NameNode 在 Zookeeper中的状态。

  3. ZKFailoverController: 订阅 HealthMonitor 和 ActiveStandbyElector 的事件,并管理NameNode 的状态,另外 zkfc 还负责解决 fencing(脑裂问题)

ZKFailoverController 主要职责:
健康监测:周期性的向它监控的 NameNode发送健康探测命令,来确定是否处于健康状态。如果机器宕机或心跳失败,那么 zkfc 就会标记它处于一个不健康的状态
会话管理:如果 NameNode是健康的,zkfc 就会在 zookeeper 中保持一个打开的会话。NameNode 处于 Active 状态时,zkfc 会在 Zookeeper 中占有一个临时节点 znode,当这个 NN 挂掉时,这个 znode 会被删除,然后备用的 NameNode将会得到这把锁,升级为主 NameNode,同时标记状态为 Active。当宕机的 NameNode 重新启动时,它会再次注册 zookeeper,发现已经有 znode 锁了,便会自动变为 Standby 状态,注意目前仅支持最多配置 2 个 NameNode
master 选举:通过在 zookeeper 中维持一个临时节点 znode,来实现抢占式的锁机制,从而判断哪个 NameNode 为 Active 状态

5.3 Yarn HA

同NameNode HA一样,resourcemanager会出现单点故障问题,可以通过zookeeper配置resourcemanager的高可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值