Hadoop ---Yarn

Yarn
全称是yet another resource negotiator,顾名思义就是另一种资源调度器,是之前的旧的Hadoo框架JobTrack的替代者,既然都叫做资源调度器了,自然就负责对资源的管理和调度 YARN负责作业资源调度,它会在集群中找到满足业务的资源,帮助作业启动任务,管理作业的生命周期。

Yarn 的三大组件:ResourceManager ,NodeManager,和ApplicationMaster

  1. ResourceManager
    同一时间内整个系统中有且只有一个RM来负责资源的调度,他包括两个组件-----一个是ApplicationManager应用管理器 负责监控应用程序的工作情况,一个是定时调度器 Scheduler 。当 Client 提交一个任务的时候,它会根据所需要的资源以及当前集群的资源状况进行分配。注意,它只负责向应用程序分配资源;我通常把他理解为一种分配资源给不同程序的策略,这种策略的选择可以是Fair Scheduler也可以是FIFO,也可以是Capacity Scheduler。
  2. ApplicationMaster
    每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算;
  3. NodeManager
    NodeManager 是 ResourceManager 在每台机器的上代理,负责对容器Container的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler 提供这些资源使用报告。
    容器container,是一个抽象的概念,大数据时代,分布式存储让我们通过搬运拆分数据到不同机器上进行存储,如果还要把数据发到不同的程序端的进行不同的运算这样明显很麻烦 ,但是把程序发到不同的机器上就很轻松 所以Yarn 将CPU核数,内存这些计算资源都封装成为一个个的容器Container,等待有需要的时候被RM间接分配任务(NM为直接启动者,而NM受命于RM,只是一个代理人),每一个container实际上可以理解为一个工作者,他有自己的工作目录(从hdfs上下载分匹配的job资源,再去运行它)
    容器由 NodeManager 启动和管理,并被它所监控。
    容器被 ResourceManager 进行调度

!一个Mr程序在Yarn上的运行流程
3. 提交一个MR程序到Yarn的简要流程(如上图):
• Client 向 Yarn 提交一个 MapReduce 作业,首先找RM分配资源;
• RM接收到作业后,向 第一个选择的NodeManager 通信,为该程序分配第一个容器。并在这个容器中运行这个应用程序对应的ApplicationMaster.
• ApplicationMaster 启动以后会向RM注册,对本次Job(也就是本次程序)进行拆分,拆出若干个map task和若干个reduce task 出来,这些 task 可以运行在一个或多个容器中。然后向 ResourceManager 申请要运行程序的容器,并定时向 ResourceManager 发送心跳。
• 当申请到容器后,ApplicationMaster 会去和容器对应的 NodeManager 通信,而后将作业分发到对应的 NodeManager 中的容器去运行,这里会将拆分后的 MapReduce 进行分发,对应容器中运行的可能是 Map 任务,也可能是 Reduce 任务。
• ApplicationMaster负责监控各个任务的执行情况 ,容器中运行的任务会向 ApplicationMaster 发送心跳,汇报自身情况。当程序运行完成后, ApplicationMaster 再向 ResourceManager 注销并释放容器资源,而我们在客户端控制台能看到类似于map100% reduce0%的百分比信息是因为客户端自提交任务以来 一直在和ApplicationMaster通信 询问其完成情况,索要完成结果。

上图中其中1 2 3 4 5步骤姑且称之为job的初始化工作,那Maptask的个数(数据的物理切块)又是是如何划分的呢?

数据的物理切块 (以上为个人梳理 如有误请不吝指教 万分感谢!!!)