目录:
1.MapReduce简介
2.MapReduce分而治之思想
3.MapReduce执行流程
4.MapReduce实现架构
5.MapReduce任务提交流程
MapReduce简介
MapReduce MapReduce是一个用于处理海量数据的分布式计算框架 。
- 此框架解决了:
- 数据分布式存储
- 作业调度
- 容错
- 机器间通信等复杂问题
MapReduce分而治之思想
- 分治思想:分解、求解、合并
- MapReduce映射:
- 分:map(把复杂的问题分解为若干“简单任务)
- 合:reduce
MapReduce执行流程
1、数据存到HDFS上,(inputFormat)是MapReduce的一个实现类,在这个类里面提供了两个能:一个是数据切分功能还有一个是记录读取器功能。
2、在这个HDFS上通过InputFormat这么一个数据接口会把HDFS里面的大的数据会切分成5个split(就是5个分片),然后每一份代表不同的一个小块,切分完的这个每一个子的数据作为后续真正Map这么一个算子要读入的数据源,这里面分配了3个Map,这个时候可能第一个Map它的输入是来自两个split的,第二个Map它也是输入来自两个的split的,最后一个Map来自一个split。
3、Map读完这个数据处理之后,开始做一些个逻辑处理,那这个逻辑处理相当于开始把你的钱进行分门别类,分门别类之后相当于这时候Map输出就是都是已经整理好的一个结构。
4、然后这个时候分配了两个Reduce,map把数据传给reduce,那么哪些数据传给reduce,map根据key做个hash然后分配到这个reduce上,然后reduce会读这些数据并做一些计算,然后将计算的值输出到(output data)上。
(1)input split:数据从HDFS进来,调用input split函数把数据分成多个map(例子只显示了一个map)(map是做一个清洗过程)
(2)buffer in memory:将map将数据写到内存缓存区里,在内存缓存区里做计算(对数据进行处理),缓存区是有限的,但它会有个预支当达到百分之80的时候就会停掉,它会留百分之20让map继续写,然后百分之80会把整个内存区全部宽住然后往外写,这个过程叫溢写过程。
(3)partition,sort and spill to disk:百分之80的数据写入到磁盘,百分之20继续接收map的数据往缓冲区写,在往磁盘写的时候会做个partition(hash取模)、排序和溢写到磁盘上(这是百分80的数据)。排序是先对partition进行排序然后再对key进行二次的排序。
(4)merge on disk:磁盘中进行merge,把三个分区的数据合并起来,但分区不会变的。
问题:分区为什么是三个呢?
答:看reduce的数量,如果reduce就一个,那么分区就一个,因为每个分区都要传到对应的reduce中。相当于做个分发。
这部分merge的数据是map通过网络传输过来的,因为map和reduce有可能不在一台机器上,
如果是一台机器上就会涉及到IO,当然这些数据也是先传到缓存区进行了计算和partition(hash取模)、排序、溢写的操作(图没有把缓冲区那部分显示出来,但运行原理是有的),然后将数据写到磁盘进行merge,下一步就是将多个merge的数据进行再次的merge合并成最终一个文件然后写到reduce进行计算然后再出来,最后输出来的数据一定是一个文件。
注意:reduce是有两次merge过程,
partition的数量就是reduce的数量,由reduce的数量决定partition的数量。
我们只写map和reduce函数,其他都是由框架提供。
MapReduce shuffle过程:
https://blog.csdn.net/u014374284/article/details/49205885
shuffle起到相同的key落到reduce中作用
MR:多进程模型(缺点:每个任务启动时间长,所以不适合于低延迟的任务
优点:资源离,稳定性高,开发过程中不涉及内存锁(互斥锁、读写锁)的开发)
Spark:多线程模型(缺点:稳定性差
优点:速度快,适合低延迟的任务,适合于内存密集型任务)
wordcount
spliting:将三个句子拆分开
maping:整理
shuffling:把相同的key做一个整理
reducing:每一个reduce负责处理一类key的数据统计
final result:结果合并
MapReduce实现架构
– JobTracker(分配任务和监控作用)
• 主进程,负责接收客户作业提交,调度任务到作节点上运行,并提供诸如监控工作节点状态
及任务进度等管理功能,一个MapReduce集群有一个jobtracker,一般运行在可靠的硬件
上。
• tasktracker是通过周期性的心跳来通知jobtracker其当前的健康状态,每一次心跳包含了可
用的map和reduce任务数目、占用的数目以及运行中的任务详细信息。Jobtracker利用一个
线程池来同时处理心跳和客户请求。
– TaskTracker
• 由jobtracker指派任务,实例化用户程序,在本地执行任务并周期性地向jobtracker汇报状
态。在每一个工作节点上永远只会有一个tasktracker
MapReduce任务提交流程
1)代码编写;2)作业配置;3)作业提交;4)Map任务的分配和执行;4)处理中间结果;5)Reduce任务的分配与执行;6)作业完成。