• Hadoop系列(九)Hadoop三大核心之Yarn-资源调度详解


    Yarn的调度流程详解

    1. Client端提交作业到ResourceManager中的ApplicationManager,申请JobID(唯一ID)

    2. RM返回一个作业ID,并且将一个临时hdfs路径返回给 Client,要求Client将要上传的文件发送到这个临时目录中。(任务结束后,该临时目录将被删除)

    3. Client将作业运行所需要的资源(jar包、配置文件和分片信息等)向指定的HDFS路径上传

    4. 上传成功后,向RM中的AM发送请求,执行作业

    5. AM将请求转发给调度器,调度器开始处理请求

    6. 调度器将任务放置队列中,当执行到请求的时候,则告知ApplicationManager 可以分配容器,告知NodeManager的信息用于开辟Container

    7. ApplicationManager命令NodeManager创建一个Container并运行作业的ApplicationMaster。NodeManager创建一个Container并启动作业的ApplicationMaster。ApplicationMaster将自己注册到ApplicationManager,使得ApplicationManager可以监控到Job的执行状态,Client也可以通过ApplicationManager对作业进行控制。

    8. ApplicationMaster查询临时hdfs路径,获取jar包信息,配置文件等,创建map和reduce任务

    9. ApplicationMaster请求调度器分配资源,开辟map,reduce任务资源

    10. 调度器返回执行信息,内含在哪些NodeManager可开辟资源信息

    11. ApplicationMaster通知NodeManager开辟资源池启动map和reduce任务

    12. NodeManager 启动自身资源池中的任务

    13. map、reduce任务查询临时hdfs路径的数据。开始执行。ApplicationMaster实时监控自己管理的map、reduce任务执行情况,如果失败,请求调度器在新节点中开辟资源池,执行失败的程序。ApplicationManager实时监控自己管理的ApplicationMaster执行情况,如果ApplicationMaster 宕机,创建一个新的ApplicationMaster,继续监控原有的map和reduce任务,在此期间,map、reduce任务不受影响

    14. 程序成功,释放资源

    Yarn的调度策略

    • FIFO调度
    • 容量调度
    • 公平调度

    1.FIFO先进先出调度

    这种调度最简单,将应用放置在一个队列中,然后按照提交的顺序将所有的Applications放到队列中,先按照作业的优先级高低、再按照到达时间的先后,为每个app分配资源。如果第一个app需要的资源被满足了,如果还剩下了资源并且满足第二个app需要的资源,那么就为第二个app分配资源。

    优点:简单,不需要配置。

    缺点:不适合共享集群。如果有大的app需要很多资源,那么其他app可能会一直等待。

    2.Capacity 容量调度机制

    容量调度机制适用于一个集群(集群被多个组织共享)中运行多个Application的情况,目标是最大化吞吐量和集群利用率。

    容量调度允许将整个集群的资源分成多个部分,每个组织使用其中的一部分,即每个组织有一个专门的队列,每个组织的队列还可以进一步划分成层次结构(Hierarchical Queues),从而允许组织内部的不同用户组的使用。

    每个队列内部,按照FIFO的方式调度Applications。当某个队列的资源空闲时,可以将它的剩余资源共享给其他队列。

    实例:

    有一个专门的队列允许小的apps提交之后能够尽快执行,job1先提交到queueA,并没有占用系统的全部资源(假如job1需要100G内存,但是整个集群只有100G内存,那么只分配给job1 80G),job2可提交到queueB 中快速执行。

    3.Fair 公平调度机制

    FairScheduler允许应用在一个集群中公平地共享资源。默认情况下FairScheduler的公平调度只基于内存,也可以配置成基于memory & CPU。当集群中只有一个app时,它独占集群资源。当有新的app提交时,空闲的资源被新的app使用,这样最终每个app就会得到大约相同的资源。可以为不同的app设置优先级,决定每个app占用的资源百分比。FairScheduler可以让短的作业在合理的时间内完成,而不必一直等待长作业的完成。

    Fair Sharing: Scheduler将apps组织成queues,将资源在这些queues之间公平分配。默认情况下,所有的apps都加入到名字为“default“的队列中。app也可以指定要加入哪个队列中。队列内部的默认调度策略是基于内存的共享策略,也可以配置成FIFO和multi-resource with Dominant Resource Fairness

    Minimum Sharing:FairScheduller提供公平共享,还允许指定minimum shares to queues,从而保证所有的用户以及Apps都能得到足够的资源。如果有的app用不了指定的minimum的资源,那么可以将超出的资源分给别的app使用。

    FairScheduler默认让所有的apps都运行,但是也可以通过配置文件配置每个queue中的分配权重,若权重1:1,当两个queue同时执行任务时,各分到一半资源。

    实例:

    两个用户A和B。A提交job1时集群内没有正在运行的app,因此job1独占集群中的资源。用户B的job2提交时,job2在job1释放一半的containers之后,开始执行。job2还没执行完的时候,用户B提交了job3,job2释放它占用的一半containers之后,job3获得资源开始执行。

  • 相关阅读:
    js 文件的操作
    js重点基础知识 以及小案例_最简单的轮播图 简单的动态表格( encodeURIComponent()编码比 encodeURI()编码)
    2阶——数据库连接池 c3p0 , druid, dbcp (其实所有的连接池都实现了dataSource接口,就可以调用getconnection方法)
    2阶——JDBC,JDBCTemplate(操作数据库)
    vue + django 批量删除
    简单的模糊搜索 Vue + django
    vue 父子组件传参简单的分页
    vue 多对多反序列化上传图片
    模型里的 抽象类 表继承
    django 多对多反序列添加
  • 原文地址:https://www.cnblogs.com/valjeanshaw/p/11809713.html
Copyright © 2020-2023  润新知