每一项新技术都是为了解决某个痛点,随着数据量指数型得增长,面对海量的数据技术,虽然存储用 Hadoop 的 HDFS 文件系统解决,但没初加工的数据如同一堆刚从矿场运出来的矿砂,价值度低。
那么该如何处理海量的数据呢,比如分析某个时间段订单量 / 某个地区的几十年的温度?为了解决这个问题,不得不介绍 Map reduce 这个框架。
MapReduce 是一个分布式计算模型框架,由两个阶段组成:Map和Reduce。
主要用于搜索领域,解决海量数据的计算问题,只需要实现 Map() 和 Reduce() 两个函数即可。
好比家里一堆家务活,全部给一个人做可能一整天都弄不完,于是分工,老二(Map)负责清洗碗筷,老幺(Map)负责拖地,于是很快就搞定了;老大负责检查(Reduce 汇总)。这就是MapReduce 把任务分解再汇总。
粗略的讲,MapReduce 的工作流程分为:
map task
( Map 任务) 与
reduce task
(Reduce 任务)。
1、把一个(或多个)需要处理的文件(block) 按 spill 切分并启动对应 map , 然后输出到一个环形内存缓冲区,用于存储任务的输出。
当内存缓冲区到阙值(0.8)时,会把内容写到磁盘的指定目录下的新建的一个溢出写文件。
注意:
一个 spill (切片)对应一个 map task。
,map task 的并发数量是由 spill 决定的。
2、写磁盘前,要 partition (分区),sort (排序)。
如果有 combiner(相同 key 的 map ),combine(合并) 排序后数据。
3 、等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。
1、Reducer 通过 Http 方式得到输出文件的分区。
2、TaskTracker 为分区文件运行 Reduce 任务。复制阶段把 Map 输出的复制到 Reducer 的内存或磁盘。一个 Map 任务完成,Reduce 就开始复制输出。
3 、排序阶段合并 map 输出,然后走 Reduce 阶段。
以生活的场景为例子,
一个餐厅进了一批食材(input),不同的厨师去拿(Split)对应的食材切碎(Map),切碎之后就放到不同的机器上(烤箱 冷藏柜)(Shuffle 洗牌),然后顾客来会点不同的食物,服务员会给他们组装(Reduce),最后交给顾客(Output / Finalize)。
Map Reduce 就是一种分治思想,把大问题分解成小问题,各个击破,那么应用场景呢?
Combiner / Partitioner 的作用是什么,应用场景是什么以及 Shuffler 的过程是怎么样的?
本文分享自微信公众号 - 一起学大数据呀(cjm1540129121)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4631233/blog/4533363