HADOOP YARN原理及资源调度

    技术2022-07-11  101

    文章目录

    1、ResourceManager2、NodeManager3、Applicacation Master4、yarn调度方式5、Yarn架构及各角色职责6、Yarn作业执行流程7、特点8、MapReduce在Yarn上的运转

    1、ResourceManager

    ReaouceManager(资源管理器RM)常驻守护进程: 管理集群资源,负责全局资源的监控、分配和管理; 接收来自Nodemanager的心跳信息,进行整体资源的汇总; 监控Application Master的开启和创建

    2、NodeManager

    yarn中的每一台节点服务器都运行一个Node manager, Node manager相当于管理当前机器的一个代理; 负责本台机器的程序运行,并且对本台机器资源进行管理和监控; Node Manager定时向ResourceManager 汇报本节点的资源(cpu、内存)使用情况; 启动并监控Container;

    3、Applicacation Master

    用户提交一个应用将会产生对应的Applicacation Master(AM), AM常驻在Node manager上; 每一个AM都需要于Node manager进行资源协商,将获取所需的资源(container)用于任务(Task)的运行监控任务(Task)的运行情况; 如果Task运行失败,他将负责为其重新申请资源和启动任务;

    4、yarn调度方式

    1 、先进先出调度 2、容量调度 3、公平调度

    5、Yarn架构及各角色职责

    这张图足够咱们喝一壶的,来吧,展示!

    6、Yarn作业执行流程

    1、client向ResourceManager发出任务请求。 2、Resource Manager指定一个NodeManager启动其ApplicationMaster。 3、ApplicationMaster将计算任务反馈给Resource Manager。4、ApplicationMaster将任务分割分发到不同的NodeManager。 5、NodeManager启动Task执行work。

    7、特点

    1、yarn 具有双层调度策略,Resource Manager将资源分配给Application Master,Application Master再将资源分配给NodeManager。而且,yarn具有预留的调度策略。资源不够时,会为Task预留资源,直到积累充足

    2、yarn具有较好的容错机制。当任务失败,ResourceManager将失败任务告诉Application Master。由ApplicationMaster处理失败的任务。ApplicationMaster会保存已经执行的Task,重启不会重新执行

    3、yarn支持多种类型资源调度,其基于DRF算法实现。而且,其支持多种资源调度器FIFO、FairScheduler以及Cpacity Scheduler。最后,yarn支持多租户资源调度器包括支持资源按比例分配、层级队列划分方式以及支持资源抢占

    4、yarn支持内存和CPU二种资源隔离。内存是一种”决定生死“的资源。CPU隔离包括默认不对CPU资源进行隔离和基于Cgroups的方案

    5、 yarn支持的调度语义包括请求某个特定节点/机架上的特定资源量、将某些节点加入(或移除)黑名单,不再为自己分配这些节点上的资 源以及请求归还某些资源。不支持的语义包括请求任意节点/机架上的特定资源量、请求一组或几组符合某种特质的资源、超细粒度资源以及动态调整Container资源 。

    6、yarn是通用的统一资源管理系统,同时运行长应用程序和短应用程序 。长应用程序通常情况下,指永不停止运行的程序 ervice、HTTP Server等。短应用程序指短时间(秒级、分钟级、小时级)内会运行结束的程序 MR job、Spark Job等 。如下图所示,yarn使得集群中各种任务的执行成为可能。 Hadoop及YARN架构

    8、MapReduce在Yarn上的运转

    1、用户向YARN中提交应用程序,其中包括AM程序、启动AM的命令、命令参数、用户程序等;事实上,需要准确描述运行ApplicationMaster的unix进程的所有信息。提交工作通常由YarnClient来完成。 2、RM为该应用程序分配第一个Container,并与对应的NM通信,要求它在这个Container中启动AM; 3、AM首先向RM注册,这样用户可以直接通过RM査看应用程序的运行状态,运行状态通过 AMRMClientAsync.CallbackHandler的getProgress() 方法来传递给RM。 然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4〜7; 4、AM采用轮询的方式通过RPC协议向RM申请和领取资源;资源的协调通过 AMRMClientAsync异步完成,相应的处理方法封装在AMRMClientAsync.CallbackHandler中。 5、—旦AM申请到资源后,便与对应的NM通信,要求它启动任务;通常需要指定一个ContainerLaunchContext,提供Container启动时需要的信息。 6、NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务; 7、各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;ApplicationMaster与NM的通信通过NMClientAsync object来完成,容器的所有事件通过NMClientAsync.CallbackHandler来处理。例如启动、状态更新、停止等。 8、应用程序运行完成后,AM向RM注销并关闭自己。

    Processed: 0.015, SQL: 9