MapReduce概述
MapReduce是一种分布式并行编程框架
摩尔定律从2005年左右开始逐渐失效
MapReduce体系结构
TaskTracker是以什么方式来衡量自己的资源使用情况?使用一个slot(槽)的概念,它把机器上面的所有的CPU内存资源进行打包,然后把资源进行等分,等分成很多个slot
MapReduce工作流程
MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。
(1)Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。
(2)Reducer负责对map阶段的结果进行汇总。Reduce(归约)
一个比较形象的语言解释MapReduce:
我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
输入时来源于分布式文件系统HDFS,输出也是写入到HDFS
map任务是key-value形式的
不同的map之间和不同的reduce任务之间都是不会进行通信的
把map输出的结果进行分区排序归并合并,这个过程叫shuffle,shuffle过程结束之后才会把响应的结果分发给reduce
map任务的数量就是有分片数量决定的
Shuffle过程原理
文件存储格式可能是文本格式文件,或者是二进制文件,各种格式的文件都有,但最终都可以通过RecordReader阅读器生成满足Map函数需要的key-value形式,输入给Map函数
排序是自动按照key的字典序排序
合并不是必须的,是用户定义的
合并是把(a,1)(a,1)合并成(a,2)
归并是生成一个(key,value-list),就是生成一个(a,(1,1,1))的格式,把值构成列表value-list,这叫归并
MapReduce应用程序执行过程
分为6个步骤:
①用户编写了一个MapReduce应用程序,把程序分布到不同的机器上。从整个集群中选出相关机器
Master和Worker
Master只有一个,其他机器作为Worker。
Master机器作为一个管家的角色,上面运行JobTracker
Worker可以执行Map任务,也可以执行Reduce任务
②选择一部分Worker执行Map任务,另外一部分Worker执行Reduce任务
对于执行Map任务的机器,需要给他输入数据,而输入数据一般都是一个非常大的文件,所以我们要对它进行拆分,要对一个大的数据集进行分片。我们需要从执行Map任务的机器中选出几个空闲的机器去执行数据分片的处理
③从HDFS各个分片中把数据读入,读入以后生成相关的(key,value)键值对,然后提交给Map任务去执行。Map里面包含了用户编写的应用程序处理逻辑,然后会输出一堆的相关的(key,value),输出结果不是直接写入磁盘,也不是直接发送给Reduce任务,而是先写到缓存
④把缓存中的数据写到磁盘。缓存中的数据一旦写满后,会溢写到磁盘(缓存中的数据经过分区排序或者可能发生的合并操作,再把它写入到磁盘中去)。写到磁盘以后就生成一个大的文件,这个文件中包含的是很多个分区的数据,并且都是排序合并以后的数据,这些数据最终发送到远端的reduce任务去处理
⑤负责执行相关Reduce任务的机器会从各个相关的map任务机器,把属于自己处理的数据拉回去,拉回到本地进行相关的处理,处理完以后执行用户自定义的reduce函数,完成数据处理,处理结果就是一堆的键值对
⑥把相关的结果写到输出文件(HDFS)当中去
实例分析:WordCount
对一个大的文本文件中的单词进行词频统计
并不是所有任务都能用MapReduce去解决,只有能够满足分而治之的任务,才能够用MapReduce去做。也就是说,可以把一个大的块,切分成很多小的块,这些小的块分别放在不同机器上并行执行,彼此结果不依赖对方的结果,这样的可以用MapReduce去做。
如果数据之间结果相互依赖,就不能用MapReduce去做了
没有定义combine函数
定义combine函数
MapReduce
最新推荐文章于 2020-05-08 19:43:23 发布