Yarn初探

来源:互联网 发布:淘宝网孕妇裤 编辑:程序博客网 时间:2024/05/16 07:04

    Yarn是新一代的MapReduce执行框架(简称为MapReduce2)和老版本的MapReduce执行框架(简称为MapReduce1)相比最大的改变是,将MapReduce1的JobTracker分解为两个部分,资源管理器和作业调度器。MapReduce2有一个全局的资源管理器(ResourceManager),负责计算分配集群的计算资源。资源管理器和多个节点管理器(NodeManager,每个slave node一个NodeManager)构成了数据计算框架。


   资源管理器由两个主要部分组成,一个是调度器(Scheduler),负责分配运行资源(CPU,内存,磁盘和网络)给各种运行的程序对象;一个程序管理器(ApplicationsManager),负责接受客户端提交作业,分配运行ApplicationMaster程序的容器,以及当运行ApplicationMaster的容器失败时重启容器。
   每个作业由一个程序管理器(ApplicationMaster)和多个由资源管理器分配给作业运行任务的容器(Container)组成,程序管理器的作用大致和MapReduce1中的JobTracker相当,负责与资源管理器和节点管理器协商所需的计算资源,在分配的容器上运行任务和监控任务。

 
  作业在Yarn框架下的运行由五个实体的相互作用形成,这五个实体是:
1.客户端,提交mapreduce作业
2.Yarn资源管理器
3.Yarn节点管理器‭,运行和监控集群中的计算容器
4.程序管理器
5.分布式文件系统(一般为HDFS),在实体间共享作业相关的文件

作业在Yarn框架下的工作原理:
1.作业提交
 当mapreduce.framework.name设置为yarn时启动MapReduce2,客户端从ResourceManager获取Job ID,客户端检查作业的输出设置是否合法,然后计算作业的输入分片(input splits),拷贝作业相关的资源,如作业的Jar文件,配置文件,分片信息等到HDFS里,最后通过Job类的submitApplication函数将作业提交给ResourceManager
2.作业初始化
当ResourceManager收到客户端提交的作业,将作业申请交给作业调度器,作业调度器为作业分配第一个计算容器,用来给ResourceManager运行ApplicationMaster程序(ApplicationMaster程序要被NodeManager管理,从Yarn的框架图可以看出这一点)。
  ApplicationMaster的主类是MRAppMaster,它创建一系列的簿记对象来跟踪作业的进度,然后在HDFS中获取客户端计算的输入分片,为每个输入分片创建一个Map任务,创建mapreduce.job.reduces属性设置的数量个Reduce任务。
  MapReduce2和MapReduce1不同之处在于,当作业比较小时(默认为10个Map任务,1个reduce任务),作业的所有任务会在ApplicationMaster的节点上运行,这是一种优化措施,可以提高作业的效率,因为这样减少了网络之间的传输。
  当作业较大时需要对任务进行分配,ApplicationMaster从ResourceManager请求运行map任务和reduce任务的容器,请求是通过心跳函数调用执行的,心跳函数传输的信息包括每个map任务的数据的位置信息(调度器要通过这些信息作出调度决策)、任务的内存需求。
3.任务执行
一旦调度器为任务分配好运算容器后,ApplicationMaster联系节点管理器启动运算容器,然后在容器内启动YarnChild(相当于MapReduce1里的TaskTracker),将任务所需的作业配置文件,作业Jar文件和分布式缓存里的相关文件拷贝到本地文件系统中,最后运行map任务和reduce任务。
4.进度、状态更新和作业完成
map任务和reduce任务定期向ApplicationMaster汇报运行的状态和完成程度,当所有任务完成时,清理完掉所有中间结果,报告已经完成作业。
原创粉丝点击