MapReduce

目录:

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)作业完成。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值