转自:http://blog.csdn.net/javaman_chen/article/details/8576028
MapReduce的大体流程是这样的,如图所示:
由图片可以看到mapreduce执行下来主要包含这样几个步骤
1.首先对输入数据源进行切片
2.master调度worker执行map任务
3.worker读取输入源片段
4.worker执行map任务,将任务输出保存在本地
5.master调度worker执行reduce任务,reduce worker读取map任务的输出文件
6.执行reduce任务,将任务输出保存到HDFS
若对流程细节进行深究,可以得到这样一张流程图
角色描述:
JobClient:执行任务的客户端
JobTracker:任务调度器
TaskTracker:任务跟踪器
Task:具体的任务(Map OR Reduce)
mapreduce执行流程自己的理解:
1、执行一个mapreduce程序
2、jobclient将作业需要的文件上传到hdfs,并将文件数据进行分片(inputt split)
3、jobtracker对作业进行初始化,并调用tasktracker执行map task,map task不断从对应的split解析出一个个key/value,并调用map()方法处理,处理完后根据reduce task个数将结果分层若干分片(partition)写到本地磁盘。
4、jobtracker调用tasktracker执行reduce task,reduce task从每个map task读取属于自己的partition,然后对相同key的数据进行聚集排序,生成key,value list。并调用reduce()方法。最后将结果输出到文件中
从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化、分配、执行、反馈、成功与失败的后续处理
每个阶段所做的事情大致如下
任务初始化
1.JobClient对数据源进行切片
切片信息由InputSplit对象封装,接口定义如下:
- public interface InputSplit extends Writable {
- long getLength() throws IOException;
- String[] getLocations() throws IOException;
- }
可以看到split并不包含具体的数据信息,而只是包含数据的引用,map任务会根据引用地址去加载数据
InputSplit是由InputFormat来负责创建的
- public interface InputFormat<K, V> {
- InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
- RecordReader<K, V> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;
- }
JobClient通过getSplits方法来计算切片信息,切片默认大小和HDFS的块大小相同(64M),这样有利于map任务的本地化执行,无需通过网络传递数据
切片成功后,JobClient会将切片信息传送至JobTracker
2.通过jobTracker生成jobId
JobTracker.getNewJobId()
3.检查输出目录和输入数据源是否存在
输出目录已存在,系统抛出异常
输入源目录不存在,系统抛出异常
4.拷贝任务资源到jobTracker机器上(封装任务的jar包、集群配置文件、输入源切片信息)
任务分配
JobTracker遍历每一个InputSplit,根据其记录的引用地址选择距离最近的TaskTracker去执行,理想情况下切片信息就在TaskTracker的本地,这样节省了网络数据传输的时间
JobTracker和TaskTracker之间是有心跳通信的逻辑的,通过彼此间不停的通信,JobTracker可以判断出哪些TaskTracker正在执行任务,哪些TaskTracker处于空闲状态,以此来合理分配任务
任务执行
TaskTracker接到任务后开始执行如下操作:
1.将任务jar包从HDFS拷贝到本地并进行解压
2.创建一个新的JVM来执行具体的任务,这样做的好处是即使所执行的任务出现了异常,也不会影响TaskTracker的运行使用
如果所执行的任务是map任务,则处理流程大致如下:
首先加载InputSplit记录的数据源切片,通过InputFormat的getRecordReader()方法
获取到Reader后,执行如下操作:
- K key = reader.createKey();
- V value = reader.createValue();
- while (reader.next(key, value)) {//遍历split中的每一条记录,执行map功能函数
- mapper.map(key, value, output, reporter);
- }
执行反馈
mapreduce的执行是一个漫长的过程,执行期间会将任务的进度反馈给用户
任务结束后,控制台会打印Counter信息,方便用户以全局的视角来审查任务
执行成功
清理MapReduce本地存储(mapred.local.dir属性指定的目录)
清理map任务的输出文件
执行失败
1.如果task出现问题(map或者reduce)
错误可能原因:用户代码出现异常;任务超过mapred.task.timeout指定的时间依然没有返回
错误处理:
首先将错误信息写入日志
然后jobtracker会调度其他tasktracker来重新执行次任务,如果失败次数超过4次(通过mapred.map.max.attempts和mapred.reduce.max.attempts属性来设置,默认为4),则job以失败告终
如果系统不想以这种方式结束退出,而是想通过Task成功数的百分比来决定job是否通过,则可以指定如下两个属性
mapred.max.map.failures.percent map任务最大失败率
mapred.max.reduce.failures.percent reduce任务最大失败率
如果失败比率超过指定的值,则job以失败告终
2.如果是tasktracker出现问题
判断问题的依据:和jobtracker不再心跳通信
jobtracker将该tasktracker从资源池中移除,以后不在调度它
3.jobtracker出现问题
jobtracker作为系统的单点如果出现问题也是最为严重的问题,系统将处于瘫痪
相关推荐
以下是MapReduce执行流程、Split切片、以及MapTask过程的详细解析。 1. MapReduce执行流程: MapReduce的工作流程主要分为四个步骤:作业提交、任务调度、Map任务执行和Reduce任务执行。首先,客户端将作业提交给...
本节将对 Hadoop MapReduce 的工作机制进行介绍,主要从 MapReduce 的作业执行流程和 Shuffle 过程方面进行阐述。通过加深对 MapReduce 工作机制的了解,可以使程序开发者更合理地使用 MapReduce 解决实际问题。 ...
### MapReduce详细流程 #### 一、MapReduce概述 MapReduce是Hadoop生态系统中的核心组件之一,主要用于处理大规模数据集的分布式计算。它基于一种简单的编程模型,将复杂的任务分解为两个基本步骤:Map(映射)和...
TaskTracker:定期与JobTracker通信,执行Map和Reduce任务 HDFS:保存作业的数据、配置、jar包、结果 作业运行流程 1.在客户端启动一个作业。 2.向JobTracker请求一个Job ID。 3.将运行作业所需要的资源文件复制到...
060 MapReduce执行流程之Shuffle和排序流程以及Map端分析 061 MapReduce执行流程之Reduce端分析 062 MapReduce Shuffle过程讲解和Map Shuffle Phase讲解 063 Reduce Shuffle Phase讲解 064 源代码跟踪查看Map Task和...
本篇将详细阐述Hadoop中的MapReduce执行流程,包括其主要概念、数据结构和整体工作过程。 1. MapReduce执行的关键角色 - JobClient:MapReduce作业的起点,用户通过JobClient类提交作业,包含应用程序和配置信息。...
在MapReduce执行流程中,应用程序开发者主要关注Map和Reduce函数的实现,而其他的如数据拆分、调度、容错等复杂工作则由框架自动处理。这大大降低了开发大规模数据处理应用的难度。 总结起来,MapReduce是一种高效...
实验的总结与思考部分,强调了实验的目标在于理解和掌握MapReduce编程思想,了解MapReduce作业的执行流程,以及如何使用MapReduce Java API进行编程。此外,还包括在Hadoop集群上运行程序,利用Web界面和Shell命令...
MapReduce执行流程: * Client:作业提交发起者。 * JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业。 * TaskTracker:保持JobTracker的Task队列,执行Task,报告Task状态。 Cloudera ...
MapReduce执行流程包括提交任务、调度Map任务、执行Map任务、Reduce任务分配和执行,以及最后将结果写回HDFS。 为了进一步提高效率和容错性,MapReduce支持任务的动态分配和节点间的异构性。即使某些工作节点出现...
4. **MapReduce执行流程**: - **JobClient**:用户提交作业,打包应用程序,然后提交给JobTracker。 - **JobTracker**:负责作业的调度,监控任务状态,如果任务失败则重新调度。 - **TaskTracker**:执行...
* MapReduce 程序的执行流程 * MapReduce 程序的优化方法 MapReduce 项目实践 在实践中,我们可以使用 MapReduce 来解决各种大数据处理问题。以下是一些 MapReduce 项目实践: * WordCount 程序编写及代码分析 * ...
6. **MapReduce执行流程** - JobClient将应用程序提交到JobTracker,JobTracker将任务分解为MapTask和ReduceTask,分配给TaskTracker执行。 - JobTracker负责监控所有任务的状态,重新调度失败的任务。 - ...
6. 举例说明Hive的MapReduce执行流程。 7. 如何在Hive中创建存储桶?它对性能有什么影响? 8. 当处理大数据时,如何解决Hadoop和Hive的延迟问题? 以上内容仅涵盖了Hadoop和Hive的基础知识,实际面试可能还会涉及更...
本资源摘要信息将对阿里云E-MapReduce的常见问题进行总结,涵盖了作业和执行计划的区别、作业日志的查看、集群和执行计划的计时策略、读写ODPS时的错误处理、ConsumerID消费同一个Topic时的TPS不一致问题、查看作业...
- MapReduce执行流程:JobTracker负责调度作业,TaskTracker在各节点上执行任务。Map任务处理输入数据,Reduce任务聚合结果。 3. Hadoop编程模型: - Map函数:输入是键值对(key-value pairs),输出也是临时的...