hadoop-Yarn资源调度器【尚硅谷】

news/2024/5/20 5:30:36 标签: hadoop, 大数据, hdfs

大数据学习笔记

Yarn资源调度器

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行与操作系统之上的应用程序
(也就是负责MapTask、ReduceTask等任务分配资源)

1. Yarn基本架构

Yarn主要由ResourceManager、NodeManager、ApplicationMaster、Container。
1)ResourceManager(RM)主要作用:

  • 处理客户端请求
  • 监控NodeManager
  • 启动或监控ApplicationMaster
  • 资源的分配与调度
    2)NodeManager(NM)主要作用如下:
  • 管理单个节点上的资源
  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令
    3)ApplicationMaster(AM)作用:
  • 负责数据的切分
  • 为应用程序申请资源并分配给内部的任务
  • 任务的监控和容错
    4)Container
    Container是Yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等

2. Yarn工作机制

(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请一个Application。
(3)RM将该应用程序的资源路径返回给YarnRunner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mrAppMaster。
(6)RM将用户的请求初始化成一个Task。
(7)其中一个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行MapTask资源。
(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。
在这里插入图片描述

3. Yarn作业提交全过程

第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。
(2)作业初始化
第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。
(3)任务分配
第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(4)任务运行
第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。
(5)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
(6)作业完成
除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
在这里插入图片描述

4. 资源调度器

目前,hadoop作业调度主要有三种:FIFO(先进先出)、Capacity Scheduler(容量调度 【默认】)、Fair Scheduler(功能调度)。

FIFO调度:
在这里插入图片描述
容量调度器:
在这里插入图片描述

  • 支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略
  • 为了防止同一用户的作业独占队列中的资源,该调度器会对同一个用户提交的作业所占资源量进行限定
  • 首先,计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列——最闲的
  • 其次,按照作业优先级和提交时间顺序,同时考虑用户资源量限制和内存限制对队列任务排序
  • 三个队列同时按照队列先后顺序执行。

公平调度器(并发度比较大)
在这里插入图片描述

支持多队列多用户,每个队列中的资源可以配置,同一队列中的作用公平共享队列中所有资源。

任务的推测执行

如果一个任务长时间运行不完,而且拖慢整个机制,那么就可以用到推测执行机制。
推测执行机制:发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度。为拖后腿任务启动一个备份任务,同时运行。谁先运行完,则采用谁的结果。
1)每一个Task只能有一个备份任务
2)当前job已完成的Task必须不小于5%
3)开启推测执行参数设置

不能使用推测执行机制的情况:
1)任务间存在严重的负载均衡
2)特殊任务,比如任务向数据库中写数据

推测执行算法原理
1)MR总是选择差值最大的任务,并为之启动备份任务。
2)为了防止大量任务同时启动备份任务造成的资源浪费,MR为每个作业设置了同时启动的备份任务数量上限。
3)推测执行机制实际上采用了经典的优化算法:以空间换时间
在这里插入图片描述

MapReduce跑的慢的原因

MapReduce程序效率的瓶颈在于两点:

  1. 计算机性能:CPU、内存、磁盘健康、网络
  2. I/O操作优化
    1)数据倾斜
    2)Map和Reduce数设置不合理
    3)Map运行时间太长,导致reduce等待过久
    4)小文件过多
    5)大量的不可分块的超大文件
    6)Spill次数过多
    7)Merge次数过多等。

Map阶段优化
1)减少溢写次数
2)减少合并次数
3)在Map之后,不影响业务逻辑前提下,先进行Combine处理,减少I/O。
在这里插入图片描述
reduce阶段优化
1) 合理设置Map和reduce数
2)设置Map、reduce共存:调整slowstart.completedmaps参数,是map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。
3)规避使用reduce(减少了shuffle)。
4)合理设置reduce buffer
在这里插入图片描述
在这里插入图片描述
I/O传输
1)采用数据压缩的方式
2)使用SequenceFile二进制文件
在这里插入图片描述
数据倾斜问题
方法1:抽样和范围分区
方法2:自定义分区
方法3:Combine
方法4:采用Map Join,尽量避免reduce join
在这里插入图片描述


http://www.niftyadmin.cn/n/107588.html

相关文章

【VUE】六 路由和传值

目录 一、 路由和传值 二、案例 三、案例存在无法刷新问题 一、 路由和传值 当某个组件可以根据某些参数值的不同,展示不同效果时,需要用到动态路由。 例如:访问网站看到课程列表,点击某个课程,就可以跳转到课程详…

一起玩转开源数据库!OceanBase DevCon 之开源生态全景解析

​ 2023 年 3 月 25 日,首次 OceanBase 开发者大会将在北京举办,OceanBase 首席科学家阳振坤与 OceanBase CTO 杨传辉领携众多技术专家,将与开发者共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势,OceanBase 开源技术全景生…

志愿者招募令|来!一起Build OceanBase第一次开发者大会

2023 年 3 月 25 日,我们将开启第一次 OceanBase 开发者大会,走近开发者,共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势,分享全新的产品 Roadmap,交流场景探索和最佳实践。 为了让活动现场更有活力,…

vue中的$forceUpdate()、$set()

$forceUpdate() 迫使vue实例重新(rander)渲染虚拟dom,注意并不是重新加载组件。 结合vue的生命周期,调用 $forceupdate 后只会触发beforeupdate和updated这两个钩子函数,不会触发其他的钩子函数。它仅仅影响实例本身和…

UI 自动化测试框架:PO 模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与…

云原生周刊:开源漏洞仍然是开发人员面临的挑战 | 2023.2.27

Synopsys 发布了最新一期的开源安全年度报告,开源安全和风险分析 (OSSRA)。这份报告由Synopsys 网络安全研究中心 (CyRC)创建,着眼于 Black Duck 审计服务团队进行的 1,700 多次商业代码库审计的结果。 自 2019 年以来,OSSRA 所有 17 家企业…

CentOS 配置FTP(开启VSFTPD服务)

网上已经有很多关于VSFTPD的配置,但有两个通病,要么就是原理介绍太多,要么就是不完整,操作下来又要查询多篇文章才能用。 我这里不讲原理,只记录操作,尽可能通过复制下面的操作可以实现FTP读写功能。方便自…

(三)随处可见的LED广告屏是怎么工作的呢?接入GUI

续上文,本篇我们将尝试接入一个GUI来控制点阵屏。在前两篇中,我们相继介绍了点阵屏的控制原理,以及如何让点阵屏按照我们所想的进行显示。本篇将在此基础上接入一个GUI,使点阵屏的控制更加优雅。限于阅读体验和展示效果&#xff0…