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