觉得有帮助的,请多多支持博主,点赞关注哦~
MapReduce 工作流程
1、MapReduce作业执行流程
1.1、提交作业
客户端向ResourceManager提交作业。首先,用户需要将所有应该配置的参数根据需求配置好。作业提交之后,就会进入自动化执行。在这个过程中,用户只能监控程序的执行情况和强制中断作业,但是不能对作业的执行过程进行任何干预。
提交作业的基本过程如下:
- 客户端通过Runjob()方法启动作业提交。
- 客户端通过ResourceManager的getNewJobId()请求一个新的作业ID。
- 客户端检查作业的输出说明,计算作业的输入分片等,如果有问题,就抛出异常,如果正常,就将运行作业所需的资源(如作业Jar文件,配置文件,计算所得的输入分片等)复制到一个以作业ID命名的目录中。
- 通过调用ResourceManager的submitApplication()方法告知作业准备执行。
1.2、初始化作业
在ResourceManager端开始初始化工作,包括在其内存里建立一系列数据结构,来记录这个Job的运行情况。
ResourceManager 接收到对其 submitApplication()方法的调用后,就会把这个调用放入一个内部队列中,交由作业调度器(scheduler)进行调度。初始化主要是创建一个表示正在运行作业的对象,以便跟踪任务的状态和进程。
- 调度器(Scheduler)分配一个容器(步骤5.a),然后资源管理器(ResourceManager)在节点管理器(NodeManager)的管理下在容器中启动应用程序的master进程(步骤5b)
- 应用程序管理器MRAppMaster对作业进行初始化:
通过创建多个簿记对象以保持对作业进度的跟踪,因为它将接受来自任务的进度和完成报告。 - MRAppMaster接来自共享文件系统的在客户端计算的输入分片。
它对每一个分片创建一个map任务对象以及由mapreduce.job.reduces属性确定的多个reduce任务对象。
备注:
MRAppMaster决定如何运行构成MapReduce作业的各个任务。如果作业很小:
配置了Yarn的uber mode(可用true):就选择在与它同一个JVM上运行任务
配置了Yarn的Uber mode(不可用false):
1.2.1、什么是小任务
【默认情况下】
小任务就是<10个mapper并且只有1个reducer并且输入大小小于一个HDFS块的任务。
【如何修改参数】
通过设置mapreduce.job.ubertask.maxmaps(默认值:9)
mapreduce.job.ubertask.maxreduces(默认值:1)
mapreduce.job.ubertask.maxbytes可以改变一个作业的上述值。
将mapreduce.job.ubertask.enable设置为false也可以完全使uber任务不可用。
1.2.2、什么是Uber模式
uber mode可以理解成]VM重用,是对小作业进行优化,不会给每个任务分别分配Contianer资源,这些小任务将统一在一个container中按照先执行map任务后执行reduce任务的顺序串执行。
该模式是Hadoop2.x开始引入的;以Uber模式运行MR作业,所有的Map任务和Reduce任务将会在Application Master所在的容器(container)中运行,也就是说整个MR作业运行的过程只会启动AM container,因为不需要启动