美文网首页大数据
[老实李] YARN通用资源管理系统

[老实李] YARN通用资源管理系统

作者: 老实李 | 来源:发表于2018-07-16 23:51 被阅读0次

一、YARN是什么?

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

image.png

二、 YARN产生的背景

mapreduce1.0回顾

image.png
  • 在Mapreduce1.0的时候,JobTracker 同时兼备了资源管理和作业控制两个功能,中央集权严重制约了Hadoop 集群扩展性。

  • 采用基于slot的粗粒度的资源分配模型,分为Map slot和Reduce slot,可由用户通过mapreduce.tasktracker.map.tasks.maximum和mapreduce.tasktracker.reduce.tasks.maximum分别设置,默认分别为2

  • 某个任务用不完的资源其他任务也不能用,map和reduce的资源也是完全不能共享的(比如一个作业刚刚提交时,只会运行Map Task,此时Reduce Slot 闲置)

image.png
  • 随着互联网高速发展导致数据量剧增,MapReduce 这种基于磁盘的离线计算框架已经不能满足应用要求,从而出现了一些新的计算框架以应对各种场景,包括内存计算框架、流式计算框架和迭代式计算框架等,而MRv1 不能支持多种计算框架并存。
image.png
  • MRv1 采用了 master/slave 结构,其中master 存在单点故障问题,一旦它出现故障将导致整个集群不可用(当然这个在MRv2的时候也是存在的,这个时候需要通过HA来解决此问题)

三、 YARN的基本架构

image.png

1.client负责把作业提交到集群

2.ResourceManager负责集群资源的统一管理和调度,承担了 JobTracker 的角色,整个集群只有“一个”,总的来说,RM有以下作用:

  • 处理客户端作业提交请求

  • 启动或监控ApplicationMaster

  • 监控NodeManager

  • 资源的分配与调度

3.NodeManager管理YARN集群中的每个节点。整个集群可以有多个。负责单个节点上资源的管理和使用(具体点说是负责计算节点上container的启动、监控和管理,防止Application Master使用多于它申请到的计算资源)。NM有以下作用

  • 单个节点上的资源管理和任务管理

  • 处理来自ResourceManager的命令

  • 处理来自ApplicationMaster的命令

4.ApplicationMaster 每个应用有一个,负责应用程序整个生命周期的管理 。
ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源比较传统(CPU 核心、内存),但未来会带来支持的新资源类型(比如图形处理单元或专用处理设备)。AM有以下作用:

  • 负责数据的切分

  • 为应用程序申请资源并分配给内部的任务

  • 任务的监控与容错

5.Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。Container有以下作用:

  • 对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及运行环境变量、启动命令等任务运行相关的信息

四、 YARN的工作流程

剖析MapReduce作业运行机制

1、作业的提交

2、作业的初始化

3、任务的分配

4、任务的执行

5、进度和状态的更新

6、作业的完成

简单版工作流程

image.png

详细版工作流程

image.png

步骤1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster、用户程序等。

步骤2:ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

步骤3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控他的运行状态,直到运行结束,即要重复步骤4-7。

步骤4:ApplicationMaster采用轮询的方式通过RPC协议找ResourceManager申请和领取资源。

步骤5:一旦Application申请到资源后,便与对应的NodeManager通信,要求启动任务。

步骤6:NodeManager为任务设置好运行环境,包括环境变量、JAR包、二进制程序等,然后将任务启动命令写到另一个脚本中,并通过运行该脚本启动任务。

步骤7:各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC协议ApplicationMaster查询应用程序的当前运行状态。

步骤8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

image.png image.png

五、 YARN HA和HDFS HA的对比

1.YARN的HA

image.png
  • 使用 Active NameNode,Standby NameNode 两个结点解决单点问题,两个结点通过 JounalNode 共享状态,通过 ZKFC 选举 Active ,监控状态,自动备援。

  • Active NameNode:接受 client 的 RPC 请求并处理,同时写自己的 Editlog 和共享存储上的 Editlog,接收 DataNode 的 Block report, block location updates 和 heartbeat;

  • Standby NameNode:同样会接到来自 DataNode 的 Block report, block location updates 和 heartbeat,同时会从共享存储的 Editlog 上读取并执行这些 log 操作,使得自己的 NameNode 中的元数据(Namespcae information + Block locations map)都是和 Active NameNode 中的元数据是同步的。所以说 Standby 模式的 NameNode 是一个热备(Hot Standby NameNode),一旦切换成 Active 模式,马上就可以提供 NameNode 服务

  • JounalNode:用于Active NameNode , Standby NameNode 同步数据,本身由一组 JounnalNode 结点组成,该组结点基数个,支持 Paxos 协议,保证高可用,是 CDH5 唯一支持的共享方式(相对于 CDH4 促在NFS共享方式)

  • ZKFC:监控 NameNode 进程,自动备援

2.hdfs的HA

image.png
  • ResourceManager HA 由一对 Active,Standby 结点构成,通过 RMStateStore 存储内部数据和主要应用的数据及标记。目前支持的可替代的 RMStateStore 实现有:基于内存的 MemoryRMStateStore,基于文件系统的 FileSystemRMStateStore,及基于 zookeeper 的 ZKRMStateStore

  • ResourceManager HA 的架构模式同 NameNode HA 的架构模式基本一致,数据共享由 RMStateStore,而 ZKFC 成为 ResourceManager 进程的一个服务,非独立存在。

Namenode和resourcemanager的HA两点最大的不同:

1.ZKFC是作为ResourceManager之中的一个进程,而Hadoop中则是一个外置的守护进程

  1. 一个是使用JounalNode共享状态,一个是通过Zookeeper共享状态
image.png

六、 MapReduce2.0与YARN

hadoop1.0到hadoop2.0的变迁

image.png
  • YARN是一个资源管理系统,负责资源管理和调度
  • MapReduce只是运行在YARN上的一个应用程序
  • 如果把YARN看做“android”,则MapReduce只是一个“app”
  • MapReduce 1.0是一个独立的系统,直接运行在Linux之上
  • MapReduce 2.0则是运行YARN上的框架,且可与多种框架一起运行在YARN上

七、MapReduce对任务执行的更多控制

MapReduce对任务执行的更多控制(暂时不明白)

  • 推测执行

  • 任务JVM重用

  • 跳过坏记录

八、Hadoop的调度器

1.调度器基本作用
根据节点资源(slot、container)使用情况和作业的要求,将任务调度到各个节点上执行
2.作业调度器考虑的因素
1、作业优先级。作业的优先级越高,它能够获取的资源(slot数目)也越多。Hadoop 提供了5种作业优先级,分别为 VERY_HIGH、HIGH、NORMAL、 LOW、VERY_LOW,通过mapreduce.job.priority属性来设置,或者用JobClient的setJobPriority()方法来设置。
2、作业提交时间。顾名思义,作业提交的时间越早,就越先执行。
3、作业所在队列的资源限制。调度器可以分为多个队列,不同的产品线放到不同的队列里运行。不同的队列可以设置一个边缘限制,这样不同的队列有自己独立的资源,不会出现抢占和滥用资源的情况
3.Hadoop的自带作业调度器

  • FIFO Scheduler 先进先出调度器


    image.png
  • Fair Scheduler公平调度器
image.png
  • Capacity Scheduler 容量调度器
image.png

4.如何配置使用调度器?

将其JAR文件放到Hadoop的类路(classpath)

然后设置mapred.jobtracker.taskScheduler属性(yarn.resourcemanager.scheduler.class)值为org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

九、Uber任务

Application Master决定如何运行构成MapReduce作业的各个任务。如果作业很小,就选择在与它同一个JVM上运行任务

什么样的作业称为小作业(又叫Uber任务或小任务)?

默认情况下,小作业指小于10个mapper且只有一个reducer且输入大小小于HDFS块的任务。

涉及属性配置如下:

  • mapreduce.job.ubertask.enable,默认值为false,表示MapReduce不以Uber任务执行

  • mapreduce.job.ubertask.maxmaps,默认值为9,表示Uber任务要求map任务的个数是<=9个

  • mapreduce.job.ubertask.maxreduces,默认值为1,表示Uber任务要求的reduce任务个数最大为1

  • mapreduce.job.ubertask.maxbytes,默认值为dfs.block.size设置的值,表示Uber任务要求的最大数据大小为一个块的大小

相关文章

网友评论

    本文标题:[老实李] YARN通用资源管理系统

    本文链接:https://www.haomeiwen.com/subject/gqbipftx.html