mapreduce机制及mapreduce任务的分析

来源:互联网 发布:linux dd命令 制作iso 编辑:程序博客网 时间:2024/04/29 15:15



由于经典的MapReducer(MapReduce1)的jobtracker负责作业的调度、任务进度监视、追踪、重启过慢的任务和进行任务登记,对于CPU的消耗非常大,而且jobtracker是与namenode在同一节点上,namenode的内存中还需要保存每个文件的各个块的元数据信息,所以对于内存的消耗非常巨大,也因此成为了mapreduce1的瓶颈。

对于节点超出4000的大型集群,mapreduce1 就会达到瓶颈。因此YARN应运而生,YARN将作业的调度和任务进度的监控这两种角色分成了两个独立的守护线程:ResourceManager 和 ApplicationMaster ,这样就解决了mapreduce1的问题。


下面是我自己对于YARN的理解:

1. 每个Client 提交一个job,也就是一个application应用程序,client将job提交给ResourceManager,从ResourceManager得到新的作业id

2.  作业客户端检查作业的输出说明,计算输入分片,这里跟mapreduce1是类似的,并将作业资源复制到HDFS上,然后提交作业。

3.当ResourceManager接收到submitApplication()后,将请求传递给调度器,调度器分配一个容器(这个容器就是用来启动ApplicationMaster 的),资源管理器在nodemanager下启动master进程。

4.接下来master进程来决定mapreduce任务的构成,也就是在哪些节点上去执行mapreduce任务,master进程通过与nodemanager的通信来启动容器,在任务执行之前,首先会将任务执行需要的资源本地化,然后执行任务。

5.在YARN下运行时,任务每三秒通过umbilical接口向application master汇报任务进度,再由master报告给client,比起mapreduce1 的tasktracker向jobtracker汇报进度要更加轻快一点。

6.作业完成后,master和容器清理工作状态,作业历史服务器保存作业的信息供用户需要时查询。


以上是我对YARN 工作机制的理解,而且YARN的好处不仅是改进了mapreduce1这么简单,YARN不再是仅仅只为mapreduce量身定制的环境了,比如在其上还可以跑spark程序,这个特性才是YARN的真正厉害之处


这个图是mapreduce任务的执行过程

1. mapper节点接收数据,并调用map方法对数据进行解析,输出一系列的键值对

2.每个map任务都有一个环形内存缓冲区,默认100M,一旦缓冲内容达到阈值,一个后台线程就会将溢出内容的spill到磁盘上,在这个过程中对内容按照key进行分区和排序

3.当map任务结束,就会产生一个已经分区好的并且排序过的输出文件

4.按照不同的分区,reduce节点会复制属于自己分区的文件,因为map节点很多,所以reduce节点会将所有map节点的输出结果中属于自己分区的文件都复制一份

5.在执行reduce任务之前,reduce节点会对这些复制的文件在进行一次merge,就是对同一key的键值对进行合并,并对其按照key排序,如果我们调用了setGroupingComparatorClass()方法的话,会在将键值对进行分组后作为reduce的输入,每组调用一次reduce方法。

6.reduce方法执行完成后输出最终的结果,并按照job配置的输出路径写入到设置的路径;


以上是我对于YARN下mapreduce的工作机制以及mapreduce任务的理解。因为我也是初学者,所以可能对于有的地方叙述的不到位,希望各位读者朋友能够指正。


0 0