yarn学习笔记

一、什么是yarn?

    yarn(yet another resource negotiator)是hadoop的集群资源管理系统。它是在hadoop2时被引入,最初是为了改善mapreduce的实现,由于其具备较高的通用性,现用于支持多种分布式计算模式,如mapreduce、spark和Tez等,yarn为这些计算模式提供了使用集群资源的API。

二、yarn的核心成员

    1、resource manager:资源管理器,负责集群资源的调度和分配,一个集群只有一个。

    2、node manager:节点管理器,负责实现application的启动和节点的资源管理,node manager运行在datanode中。

    3、application master:主应用,接受resource manager分配的任务,并传达给各个node manager继续分配和执行任务。每个应用只有一个application master,它运行在一个node manager上。

    4、containers:由resource manager分配的cpu、io、网络等资源的容器。

    5、job:一个map或reduce任务。

    6、task:一个实际完成map或reduce工作的独立工作单元,task运行在node manager的container中。

三、yarn应用运行机制

    1、客户端向yarn提交作业;

    2、resource manager启动application master进程;

    3、resource manager为作业分配一个可用的node manager,并通知node manager启动一个容器用于运行application master;

    4、application master向resource manager申请容器中任务运行需要的资源;

    5、application master通知已经申请到的node manager启动map任务;

    6、map任务完成之后,application master获取结果并报告给resource manager,resource manager分配新的资源给application master;

    7、application master通知新的node manager使用新资源启动reduce任务;

    8、reduce任务完成后,将结果输出到hdfs;

    9、application master完成任务并请求销毁自己。

四、yarn与mapreduce1的比较

    1、yarn与mapreduce1在组成上的比较:

    mapreduce1 yarn
    jobtracker         resource manager、application master、timeline servier
    tasktracker         node manager
    slot container

    2、扩展性

    yarn将jobtracker的资源调度和作业控制功能进行了拆分,resource manager负责资源调度,application master负责作业控制,从而降低了jobtracker时单个节点的负担,同时突破了可扩展性瓶颈。

    3、可用性    

    mapreduce1时代的jobtracker内存中存在大量快速变化的复杂状态,使得当jobtracker出现故障时,想要快速恢复正常工作状态显得极为困难,从而难以获取高可用性。

    yarn将jobtracker的功能进行了拆分,因此可以针对resource manager和application master分别提供高可用性支持,提高了整体的可用性。

    4、利用率

    mapreduce1时的资源配置被静态的划分为了map slot和reduce slot,这样就会出现在执行任务时,由于集群中只有map slot可用导致的reduce任务必须等待的情况。而yarn的每个node manager管理一个资源池,一个应用能够按需请求资源,而不是请求一个固定的slot。

五、yarn的调度器

    1、FIFO调度器

    FIFO调度器采用先进先出模式,应用按照串行方式依次排队申请服务。

    优点:简单易懂,无需额外配置。

    缺点:不适合共享集群。当一个大应用正在执行时会占用集群中的所有资源,导致后续其他任务等待时间较长,无法在合理的时间内获取任务的结果。

    2、容量(capacity)调度器

    容器调度器会预留容器中的部分资源。当一个大应用执行时不会占据集群中的所以资源,一个专门的预留队列使用预留的资源处理资源占用较小少的小作业。这样大应用执行时间相对增加,但是能够在较为合理的时间未小作业提供结果。

    3、公平调度器

    公平调度器在运行的作业之间动态平衡资源。第一个大作业启动时会得到所有的资源,当第二个作业执行时,会分配到一半的资源,这样每个作业都能公平的共享集群资源。

    主要注意的是:第二个资源不是实时获取到集群资源,而是要等到第一个作业使用的容器完成并释放出资源之后。当小作业使用完资源并释放之后,大作业会再次使用全部的集群资源。这样既保证了集群资源的高效利用,又保证了小作业能够在合理的时间完成。

你可能感兴趣的:(积累,学习)