郑州外贸网站建设商家,广州网站建设报价表,企业网站如何部署,如何做企业介绍目录
整体执行流程
Map端执行流程
Reduce端执行流程
Shuffle执行流程 整体执行流程 八部曲 读取数据-- 定义map -- 分区 -- 排序 -- 规约 -- 分组 -- 定义reduce -- 输出数据 首先将文件进行切片#xff08;block#xff09;处理#xff…目录
整体执行流程
Map端执行流程
Reduce端执行流程
Shuffle执行流程 整体执行流程 八部曲 读取数据-- 定义map -- 分区 -- 排序 -- 规约 -- 分组 -- 定义reduce -- 输出数据 首先将文件进行切片block处理每一个block由一个MapTask处理 读取数据 将切片中每一行内容解析为键值对 keyvalue 定义map 每解析出一个键值对就调用一次Mapper类中的map方法 分区 根据这些输出的键值对进行分区分区的数量为reduce任务运行的数量默认1个 排序 对输出的键值对进行排序 规约 对这些键值对进行局部聚合处理combiner处理键值相等的键值对会调用一次reduce方法默认没有本阶段 分组合并 Reduce任务会主动从Mapper任务中复制它输出的键值对到Reduce本地数据中对所有的数据合并 然后再对这个大数据进行排序 定义reduce 对排序后的键值对调用reduce方法键相等的键值对调用一次reduce方法 输出数据 将输出的键值对写入到hdfs文件中 Map端执行流程 第一阶段是把输入目录下文件按照一定的标准逐个进行逻辑切片形成切片规划。默认情况下Split size Block size。每一个切片由一个MapTask处理。getSplits第二阶段是对切片中的数据按照一定的规则解析成key,value对。默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(单位是字节)value是本行的文本内容。TextInputFormat第三阶段是调用Mapper类中的map方法。上阶段中每解析出来的一个k,v调用一次map方法。每次调用map方法会输出零个或多个键值对。第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。默认是只有一个区。分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。第五阶段是对每个分区中的键值对进行排序。首先按照键进行排序对于键相同的键值对按照值进行排序。比如三个键值对2,2、1,3、2,1键和值分别是整数。那么排序后的结果是1,3、2,1、2,2。如果有第六阶段那么进入第六阶段如果没有直接输出到文件中。第六阶段是对数据进行局部聚合处理也就是combiner处理。键相等的键值对会调用一次reduce方法。经过这一阶段数据量会减少。本阶段默认是没有的。 Reduce端执行流程 第一阶段是Reducer任务会主动从Mapper任务复制其输出的键值对。Mapper任务可能会有很多因此Reducer会复制多个Mapper的输出。第二阶段是把复制到Reducer本地数据全部进行合并即把分散的数据合并成一个大的数据。再对合并后的数据排序。第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到HDFS文件中。 Shuffle执行流程 map阶段处理的数据如何传递给reduce阶段是MapReduce框架中最关键的一个流程这个流程就叫shuffle。 shuffle: 洗牌、发牌——核心机制数据分区排序合并。 1).Collect阶段将MapTask的结果输出到默认大小为100M的环形缓冲区保存的是key/valuePartition分区信息等。 2).Spill阶段当内存中的数据量达到一定的阀值的时候就会将数据写入本地磁盘在将数据写入磁盘之前需要对数据进行一次排序的操作如果配置了combiner还会将有相同分区号和key的数据进行排序。 3).Merge阶段把所有溢出的临时文件进行一次合并操作以确保一个MapTask最终只产生一个中间数据文件。 4).Copy阶段 ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据这些数据默认会保存在内存的缓冲区中当内存的缓冲区达到一定的阀值的时候就会将数据写到磁盘之上。 5).Merge阶段在ReduceTask远程复制数据的同时会在后台开启两个线程对内存到本地的数据文件进行合并操作。 6).Sort阶段在对数据进行合并的同时会进行排序操作由于MapTask阶段已经对数据进行了局部的排序ReduceTask只需保证Copy的数据的最终整体有效性即可。 Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率原则上说缓冲区越大磁盘io的次数越少执行速度就越快