苏州建站仿站,零基础学广告设计,生活中的电子商务有哪些,seo公司名字上一篇#xff1a; 
大数据 - Hadoop系列《三》- MapReduce#xff08;分布式计算引擎#xff09;概述-CSDN博客 目录 
13.1 MapReduce实例进程 
13.2 阶段组成 
13.4 概述 
13.4.1 #x1f959;Map阶段#xff08;映射#xff09; 
13.4.2 #x1f959;Reduce阶段执行过…上一篇 
大数据 - Hadoop系列《三》- MapReduce分布式计算引擎概述-CSDN博客 目录 
13.1 MapReduce实例进程 
13.2 阶段组成 
13.4 概述 
13.4.1 Map阶段映射 
13.4.2 Reduce阶段执行过程 
13.4.3 Shuffle机制 13.1 MapReduce实例进程 
一个完整的MapReduce程序在分布式运行时有三类 MRAppMaster:负责整个MR程序的过程调度及状态协调  MapTask负责map阶段的整个数据处理流程  ReduceTask:负责reduce阶段的整个数据处理流程  
13.2 阶段组成 一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段或者只有Map阶段。  不能有诸如多个Map阶段、多个Reduce阶段的情景出现。  如果用户的业务逻辑非常复杂那就只能多个MapReduce程序串行运行。  
13.3 MapReduce数据类型  注意整个MapReduce程序中数据都是以kv键值对的形式流转的 在实际编程解决各种业务问题中需要考虑每个阶段的输入输出kv分别是什么 
MapReduce内置了很多默认属性比如排序、分组等都和数据的k有关所以说kv的类型数据确定及其重要的。 
13.4 概述 
一个最终完整版本的MR程序需要用户编写的代码和Hadoop自己实现的代码整合在一起才可以。 
其中用户负责map、reduce两个阶段的业务问题hadoop负责底层所有的技术问题 
由于MapReduce计算引擎天生的弊端慢当下企业直接使用率以及日薄西山了所以在企业中工作很少涉及到MapReduce直接编程但是某些软件的背后还依赖MapReduce引擎。 
可以通过官方提供的示例来感受MapReduce及其内部执行流程因为后续的新的计算引擎比如Spark,当中就有MapReduce深深的影子存在。 
MR的核心思想如下图所示: MapReduce程序的工作分两个阶段进行 
13.4.1 Map阶段映射 
这个函数单独地应用在每个单元格上的操作就属于映射Map). 第一阶段把输入目录下文件按照一定的标准逐个进行逻辑切片形成切片规划  
默认Split sizeBlock size(128M每一个切片由一个MapTask处理。getsplits) 第二阶段对切片中的数据按照一定的规则读取解析返回key,value对。  
默认是按行读取数据key是每一行的起始位置偏移量value是本行的文本内容TextInputFormat) 第三阶段调用Mapper类中的map方法处理数据  
每读取解析出来的一个key,value调用一次map方法 第四阶段按照一定规则对Map输出的键值对进行分区partition.默认不分区因为只有一个reducetask,分区的数量就是reducetask运行的数量。  第五阶段Map输出数据写入内存缓冲区达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort.默认根据key字典序排序。  第六阶段对所有溢出文件进行最终的merge合并成为一个文件。  13.4.2 Reduce阶段执行过程 
第一阶段ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。 
第二阶段把拉取来的数据全部进行合并merge,即把分散的数据合并成一个大的数据再会合并的数据排序。 
第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。 
13.4.3 Shuffle机制 
1. 概述 Shuffle的本意是洗牌、混洗的意思把一组有规则的数据尽量打乱成无规则的数据。  而在MapReduce中Shuffle更像是洗牌的逆过程指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据以便reduce端接收处理。  一般把从Map产生输出到Reduce取得数据作为输入之前的过程称作shuffle  2. Map端Shuffle Collect阶段将MapTask的结果收集输出到默认大小为100M的环形缓冲区保留之前会对key进行分区的计算默认Hash分区  Spill阶段当内存中的数据量达到一定的阈值的时候就会将数据写入本地磁盘在将数据写入磁盘之前需要对数据进行一次排序的操作如果配置了combiner还会将相同分区号和key的数据进行排序。  Merge阶段把所有溢出的临时文件进行一次合并操作以确保一下MapTask最终只产生一个中间数据文件。  3. Reducer端Shuffle Copy阶段ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。  Merger阶段在ReduceTask远程复制数据的同时会在后台开启两个线程对内存到本地的数据文件进行合并操作。  Sort阶段在对数据进行合并的同时会进行排序操作由于MapTask阶段已经对数据进行了局部的排序ReduceTask只需保证copy的数据的最终整体有效性即可。  4. Shuffle机制弊端 Shuffle是MapReduce程序的核心和精髓是MapReduce的灵魂所在。  Shuffle也是MapReduce被诟病最多的地方所在MapReduce相比较于Spark、Flink计算引擎慢的原因跟Shuffle机制有很大的关系。  Shuffle中频繁涉及到数据在内存、磁盘之间的多次往复。