Hadoop MapReduce
- MapReduce核心思想
- 设计构思
- 什么是MapReduce
- MapReduce的特点
- MapReduce的不足(局限性)
- MapReduce组成
- Hadoop MapReduce实现流程
- map阶段执行过程
- Reduce阶段执行过程
- Shuffle机制
- Map端Shuffle
- Reducer端的shuffle
MapReduce核心思想
MapReduce的核心思想就是‘分而治之’,但是不可拆分的计算任务或着互相有依赖任务的数据进行计算
设计构思
MapReduce可以被分为两个阶段:Map阶段(拆分)和Reduce(合并阶段)
MapReduce处理的数据类型是键值对
MapReduce最大的优点就是对隐藏了很多底层代码的细节
什么是MapReduce
MapReduce最早出现在Google于2004年在一篇名为《MapReduce:Simplified Data Processingon Large Clusters 》的论文中被提出
MapReduce是一种分布式计算框架,那什么是分布式计算呢?
分布式计算是将该应用分解成许多小的部分,分配给多台计算机进行处理,以达到提交计算效率的目的,减少大规模数据计算的时间。
MapReduce是面向超大规模数据设计的一种计算框架,如果我们用MapReduce处理小规模数据的化还不如不用,会起到适得其反的作用,
MapReduce的特点
1、易于编程
Mapreduce框架提供了用于二次开发的接口,可以让使用它的用户很简单的利用这些简单的接口实现集群的部署,其他的交给计算框架进行处理
2、具有良好的扩展性
当已经加入计算的计算机资源不能够满足计算的时候框架会通过增加机器的方式来提高和扩展他的计算能力
3、具有很高的容错性
我们的Hadoop集群是分布式搭建和部署得,当部署的集群中如果有任何一台机器因为故障宕机,它会把这个计算机上的计算任务交给其他的计算机继续进行计算任务,以保证我们的整体计算任务的完成。
4、适用海量的数据的离线处理
可以计算很高级别的数据量(GB\TB\PB)(但是不可以用于计算流式数据)
MapReduce的不足(局限性)
实时计算性能差
在优点的时候我们就有写到,它可以计算很高级别的数据量,但是它不能够用于流式数据的计算,只能对静态的数据进行计算,虽然可以进行计算但是由于MapReduce的复杂的计算方式,他的计算方式会非常的慢
MapReduce组成
MRAppMaster:负责整个MR程序的过程调度及状态协调 (有且只能有一个)
MapTask:负责map阶段的整个数据处理流程 (根据计算的数据量可以有多个)
ReduceTask:负责reduce阶段的整个数据处理流程(根据计算的数据量可以有多个)
一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段;
也就是说出现Map阶段和Reduce阶段不是成对出现的,要不然就是只有一个map阶段,map阶段或者Reduce阶段不能够连续出现
MapReduce数据类型:是以kv键值对的形式流转、传递的,类似于字典
Hadoop MapReduce实现流程
具体的程序运行就不给大家演示了
这个是WordCount编程实现思路
map阶段的核心:把输入的数据经过切割,全部标记1,因此输出就是<单词,1>。
shuffle阶段核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对 。
reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是 单词的总次数
map阶段执行过程
1、将要进行计算的文件按照设置的标准进行切片默认Split size = Block size(128M)形成一块一块的切片后交给MapTask处理
2、对切片中的数据进行解读。
3、调用Mapper类中的map方法处理数据
4、按照一定的规则对Map输出的键值对进行分区partition
5、Map输出数据写入内存缓冲区,达到比例溢出到磁盘上
6、将内存缓冲区的溢出的数据进行合并,最终合并成一个文件
Reduce阶段执行过程
1、ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
2、将拉取的数据,进行合并合并成一个大的数据文件,然后在进行数据的整理排序
3、对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,最后将这些键值对进行存储
Shuffle机制
从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle
Shuffle在整个MapReduce执行流程图的位置
shuffle是MapReduce程序的灵魂,最核心、最重要的机制
指的是将map端的无规则的数据按照某种规则进行整理,以便reduce端接收处理。
shuffle机制弊端:频繁涉及到数据在内存、磁盘之间的多次往复。
Map端Shuffle
Map端Shuffle在整个MapReduce执行流程图的位置
可以说已经占到了maptask 的绝大部分内容了
Collect阶段:将MapTask的结果收集输出到默认大小为100M的环形缓冲区,保存之前会对key进行分区的计算, 默认Hash分区。
Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数 据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
Reducer端的shuffle
Reducer端shuffle在整个MapReduce执行流程图的位置
在Reduce task 也占据有很大的分量
Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。
Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作 。
Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序, ReduceTask只需保证Copy的数据的最终整体有效性即可
愿君前程似锦,未来可期去💯,感谢您的阅读,如果对您有用希望您留下宝贵的点赞和收藏
本文章为本人学习笔记,学习网站为黑马程序员的Hadoop可以一起学习共同进步谢谢,如有请侵权联系,本人会立即删除侵权文章。可以一起学习共同进步谢谢,如有请侵权联系,本人会立即删除侵权文章。