Hadoop 学习笔记 05 之 MapReduce 浅析

简介:

每一项新技术都是为了解决某个痛点,随着数据量指数型得增长,面对海量的数据技术,虽然存储用 Hadoop 的 HDFS 文件系统解决,但没初加工的数据如同一堆刚从矿场运出来的矿砂,价值度低。

那么该如何处理海量的数据呢,比如分析某个时间段订单量 / 某个地区的几十年的温度?为了解决这个问题,不得不介绍 Map reduce 这个框架。

一 、Mapreduce 简单介绍

官话:MapReduce 是一个分布式计算模型框架,由两个阶段组成:Map和Reduce。

主要用于搜索领域,解决海量数据的计算问题,只需要实现 Map() 和 Reduce() 两个函数即可。

通俗理解:好比家里一堆家务活,全部给一个人做可能一整天都弄不完,于是分工,老二(Map)负责清洗碗筷,老幺(Map)负责拖地,于是很快就搞定了;老大负责检查(Reduce 汇总)。这就是MapReduce 把任务分解再汇总。

二、Mapreduce 工作(流程)原理

我分两个版本解读,第一个是正式版,第二个是故事版

正式版例子

Hadoop 学习笔记 05 之 MapReduce 浅析

Hadoop 学习笔记 05 之 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 task1、Reducer 通过 Http 方式得到输出文件的分区。

2、TaskTracker 为分区文件运行 Reduce 任务。复制阶段把 Map 输出的复制到 Reducer 的内存或磁盘。一个 Map 任务完成,Reduce 就开始复制输出。

3 、排序阶段合并 map 输出,然后走 Reduce 阶段。

故事版本以生活的场景为例子,一个餐厅进了一批食材(input),不同的厨师去拿(Split)对应的食材切碎(Map),切碎之后就放到不同的机器上(烤箱 冷藏柜)(Shuffle 洗牌),然后顾客来会点不同的食物,服务员会给他们组装(Reduce),最后交给顾客(Output / Finalize)。

Hadoop 学习笔记 05 之 MapReduce 浅析

三 、应用场景

Map Reduce 就是一种分治思想,把大问题分解成小问题,各个击破,那么应用场景呢?

1、统计单词数2、建立倒排索引3、统计用户(手机号码)的流量4、计算 URL 的访问频率。。。。。。。。。。。

四、思考题:

Combiner / Partitioner 的作用是什么,应用场景是什么以及 Shuffler 的过程是怎么样的?

微信搜索公众号「一起学大数据呀」,里面有更多学习资料