MapReduce计算框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce计算框架相关的知识,希望对你有一定的参考价值。

2019/2/18 星期一

MapReduce计算框架
Mapreduce 是一个分布式的运算编程框架,核心功能是将用户编写的核心逻辑代码分布式地
运行在一个集群的很多服务器上;

为什么要MAPREDUCE
(1)海量数据在单机上处理因为硬件资源限制,无法胜任,因为需要采用分布式集群的方式来处理。
(2)而一旦将单机版程序扩展到集群来分布式运行,将极大地增加程序的复杂度和开发难度
(3)引入mapreduce 框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂×××由框架来处理

MAPREDUCE 程序运行演示
Hadoop 的发布包中内置了一个hadoop-mapreduce-example-2.4.1.jar,这个jar 包中有各种MR
示例程序,可以通过以下步骤运行:
启动hdfs,yarn
然后在集群中的任意一台服务器上执行,(比如运行wordcount):
hadoop jar hadoop-mapreduce-example-2.4.1.jar wordcount /wordcount/data /wordcount/out

MapReduce引入的问题
1、分发程序,并启动分发的程序
2、中间数据的缓存和调度
3、任务监控及失败处理

MapReduce框架运行机制
MapReduce分为3个过程:
1、map //A读取文件 B调用业务逻辑代码(程序员只关系这个部分) C收集调用结果
2、shuffle机制 //缓存一下
3、reduce //A拉取缓存中的数据 B调用业务逻辑代码(程序员只关系这个部分) C收集结果输出(最终结果)默认把最终结果写到hdfs中

MapReduce运行机制的数据流程
1、map //key:行起始偏移量 value:行的内容
2、shuffle //洗牌 按key分发:相同的key的kv必定会发给相同的reduce task
3、reduce //将key的值相同的整合成一组

mapreduce框架中的shuffle机制详解
Shuffle 缓存流程:
----shuffle 是MR 处理流程中的一个过程,它的每一个处理步骤是分散在各个maptask 和reduce task 节点上完成的,整体来看,分为3 个操作:
1、分区partition
2、Sort 根据key 排序
3、Combiner 进行局部value 的合并

shuffle阶段文字详解
1、map阶段先拿数据过来之后,会先调用map方法(我们自定义的) 拿到之后,map中会有一个context.write的输出结果
2、map端的输出结果就给到了shuffle阶段了
3、在map端有一个环形缓冲区(默认内存大小100M)【实现的功能就是把这些kv收集起来】
4、在不断输出,不断收集的过程中环形的缓存区会不断的写,会写满,那么内部的机制是不会让他写满,写到80%就会溢出,还是在map端会把溢出来的数据被 (线程split thread)管理 在这里还会把溢出来的数据进行partition(分区) sort(排序)接下里split thread会把溢出来的数据存放到磁盘上面【这里存放在磁盘中的数据是分好区 排序好了的】。溢出文件分好区,且区内有序。
5、在map端,最后一次,会把数据全部的溢出来,也是分好区且区内有序的。然后会形成很多一系列分好区的小文件,接下来会进行merge(合并)小文件合并后形成大文件。这种合并是把分区内的数据一一对应的合并 所有1号区合并形成1号区 ... 这里同样是分区且区内有序(这是最后在map端形成的最后文件形式)。
6、shuffle不是在某一个节点上完成的。shuffle是map和reduce中间的数据调度机制过程 主要包括:缓存 分区 排序
7、reduce 端 reduce主动下载map端的最后形成的文件(先主动下载所有map端的1号区的内容)。这里1号区 2号区 0号区会被分别在不同的reduce task中
8、接下来,会把从map端的1号区中都拿个过来的数据进行一次reduce端的merge(合并)并排序 //归并排序
9、每个聚合调用一次reduce方法 传递的的参数 key:是这聚合组的相同的key,values:是这一聚合组的所有value的迭代器
//产生聚合values 迭代器来传递给reduce 方法,并把这组聚合kv(聚合的依据是GroupingComparator)中排序最前的kv 的key 传给reduce 方法的入参key 。 最终会形成一个有序的且归档的文件
提示:其他的reduce也是做相同的事情,只不过其他的reduce拿到的数据可能是1号区 2号区的内容,处理的过程同上。每个reduce task会形成一个最终的有序结果文件
10、reduce端最后形成的文件,在内部有序,但是在全部不一定有序,这个需要我们程序去干预 如果是全局排序的话,需要加上分区的控制,让这个分区按照一定的区段分区,最终形成reduce的全局有序。在某一个分界点 前面的一个key一个区,中间的一个key一个区,最后的key一个区等。

小结:整个shuffle 的大流程如下:
? map task 输出结果到一个内存缓存,并溢出为磁盘文件
? combiner 调用
? 分区/排序
? reduce task 拉取map 输出文件中对应的分区数据
? reduce 端归并排序
产生聚合values 迭代器来传递给reduce 方法,并把这组聚合kv(聚合的依据是GroupingComparator)中排序最前的kv 的key 传给reduce 方法的入参key

shuffle不是在某一个节点上完成的。shuffle是map和reduce中间的数据调度机制过程 主要包括:缓存 分区 排序

以上是关于MapReduce计算框架的主要内容,如果未能解决你的问题,请参考以下文章

MapReduce计算框架

分布式计算框架MapReduce

(大数据)MapReduce

MapReduce计算模型二

hadoop之魂--mapreduce计算框架,让收集的数据产生价值 (第4篇)

MapReduce编程模型和计算框架