Map和Reduce的执行过程
当要运行一个mapreduce应用程序时,可以分为一下几个步骤:
1.用户提交任务.
2.jobTracker:相当于namenode,来协调job的运行.
3.taskTracker:相当于datanode,运行此job的task,该taskTracker有两个线程:一个是,mapTask,一个是,reduceTask.
用户提交任务时,它会向jobTracker申请新的job ID,并且计算得到输入文件input splits的数目,也就是:输入文件可以被分成多少block,block默认大小是:64M.
jobTracker会将此任务放入到队列中,然后jobTracker中某对象会轮回的查询该队列中是否有新的job,如果有则取出Job进行分配,它根据input splits的数目来创建map task的数目,并且为每个task创建一个ID.
taskTracker会每隔一段时间向jobTracker发送心跳信息和块状态(该taskTracker中存储输入文件中哪些块),告知其已经可以运行task任务了,然后jobTracker会选择其中的taskTracker进行运行,一般是选择taskTracker本地系统中已经有输入文件的部分块.taskTracker调用map task进行运行.
下面说下:map和reduce的具体执行过程:
Map 端:
1.读取数据和进行map函数运算的过程.
它首先读取input split进行map函数运算,产生输出结果.
2.将输出结果写入到内存中或磁盘中的过程.
该输出结果并非是直接写入到磁盘中,而是先写入到buffer中,当达到一定值时(默认值为:buffer的大小*0.8),这个值可以自己设定.再启动另一个线程将buffer中的数据写入到磁盘中.这叫溢写的过程,得到溢出文件,这样做的好处是:将输出结果写到内存中的线程和将内存中的数据写入到磁盘中的线程可以并行的进行.将输出结果写到内存的过程中,它会按照key的值进行排序.
3.merge过程.
当输出结果很大时,一个map Task会得到很多个溢出文件,最终会把这些溢出文件merge成一个文件,这个过程也会按照key的值进行排序.
Reduce端:
reduce过程分为三个阶段:
1.copy的过程.
2.sort的过程.
3.进行reduce函数运算
1.copy的过程.
这个过程其实就是:从map端下载数据的过程.因为map的输出是reduce的输入.reduceTask的数目可以通过参数来设定,当设定好reduceTask的数目时,可以通过hash函数,比如:拿key的值取模reduce Task的数目,来得到属于每个reduce Task的数据.当然reduce Task会从不同的map Task输出结果中下载属于自己的数据.必须注意的是:reduce Task下载数据时必须是从已经完成的map Task中的输出结果中下载数据.
2.sort的过程.
当reduce Task下载到属于自己的数据时,也会将这些数据merge成一个文件.在这个过程中,它会对key值进行排序.之前我不理解为什么这个过程会有排序?后来通过和我们组的成员探讨逐渐明白了.
我们可以知道:Map的输出结果是:key 和value键值对的形式,但是,reduce的输入确是:key 和队列的形式,那么在map和reduce之间的这个过程,肯定底层的某个东东将其转换了,目前我还不知道到底是什么东东.假设没有sort的过程,那么在转换的过程,将相同key值的value值放入到队列中时,查找相同key值时是非常耗费时间的,所以sort过程是很有必要的.
3.进行reduce函数,得到输出结果.
这个时候,reduce Task的任务已经完成,当所有的reduce Task任务完成之后,就会发送信息给taskTracker,所有的任务已经完成,这时,taskTracker也会发送信息给jobTracker,说,任务已经完成,jobTracker就会将该job任务已经完成的信息返回给用户.之前说过:jobTracker它会轮回的查询队列中是否有新的job,当有新的job时,又进行分配.
分享到:
相关推荐
- **TaskTracker**:每个TaskTracker是一个工作节点,负责执行具体的Map和Reduce任务。 - **DataNode**:存储实际的数据,Map-Reduce作业从这里读取输入数据并写入输出数据。 #### 四、Eclipse与Hadoop集群连接 ...
该模型的核心思想是将复杂的并行和分布式计算过程简化为两个主要步骤:Map 和 Reduce。Map 阶段将原始数据拆分成键值对,应用用户自定义的映射函数,生成中间键值对;Reduce 阶段则将具有相同中间键的值聚合,通过...
**任务执行与环境**:Map-Reduce框架提供了丰富的API,允许用户监控任务的执行状态,包括任务进度、错误日志、内存使用情况等,有助于及时发现和解决执行过程中的问题。 **作业提交与监控**:用户可通过Hadoop...
标题中的“使用Map-Reduce对大规模图进行排名和半监督分类”是指利用MapReduce编程模型处理大规模图数据,实现图的排序(如PageRank)和半监督学习中的分类任务。MapReduce是由Google提出的一种分布式计算框架,适用...
例如,`org.apache.hadoop.mapred.MapTask`和`org.apache.hadoop.mapreduce.ReduceTask`分别对应Map和Reduce任务的实现,开发者可以通过阅读这些源码了解任务执行的详细流程。 7. **工具集成**:有许多开源工具可以...
MapReduce模型主要由两个主要阶段组成:Map阶段和Reduce阶段,以及一个可选的Shuffle和Sort阶段。Map阶段将输入数据拆分成键值对,并对其进行局部处理;Reduce阶段则对Map阶段的结果进行全局聚合,以生成最终的输出...
Map-Reduce 的执行过程主要包括以下几个步骤: 1. **数据切分**:输入数据按照一定的规则被切分成多个部分,每个部分由一个 Map 任务处理。 2. **Map 任务**:每个 Map 任务处理一个数据切片,将其转换为中间键值对...
可以调整 `mapred.jobtracker.map.tasks.maximum` 和 `mapred.jobtracker.reduce.tasks.maximum` 参数来控制最大 Map 和 Reduce 数量。 4. **数据倾斜**:当数据分布不均时,可能导致某些任务处理时间过长。可以通过...
2. **执行过程**: - **查询解析**:Hive客户端提交查询,驱动器解析SQL语句,生成逻辑执行计划。 - **优化**:逻辑执行计划经过优化,生成物理执行计划。 - **任务分配**:物理执行计划被分解为多个Map-Reduce...
它将数据处理过程分为两个主要阶段:**Map(映射)** 和 **Reduce(归约)**。这种编程模型非常适合在大量节点组成的集群上运行,能够有效地利用集群的并行处理能力来加速数据处理任务。 #### 二、Map-Reduce的主要...
本文主要探讨了两种 MapReduce 中的 Join 实现:Map Side Join 和 Reduce Side Join。 一、Join 的概念 Join 操作在数据库中是非常常见的,它用于将来自两个或更多表的数据根据某些共享字段(即键)关联起来。在 ...
- **定义**:Pipeline Table Functions是一种特殊类型的表函数,它们可以嵌入到数据流中执行过程逻辑。从逻辑层面来看,这些函数可以在SELECT语句的FROM子句中出现,就像一个普通的表一样返回一系列行。 - **输入与...
4. **索引构建过程**:如何使用MapReduce将文献数据转化为Solr索引,包括Map阶段的数据预处理和Reduce阶段的索引创建。 5. **查询处理**:MapReduce在查询执行中的角色,如何通过分布式查询提高响应速度。 6. **...
JobTracker负责调度和监控所有的Map和Reduce任务,确保任务的正确执行和资源的有效分配。然而,在Hadoop 2.x版本中,JobTracker被YARN(Yet Another Resource Negotiator)取代,YARN成为资源管理和任务调度的中心,...
通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...
- **任务调度**:根据资源可用性及优先级等因素,将作业分解成多个任务(Map和Reduce任务),并分配给合适的TaskTracker进行执行。 - **状态监控**:跟踪所有TaskTracker的状态,以及各个任务的执行情况,确保作业...
map reduce的全部执行流程,源码分析视图