Hadoop 学习笔记 05 之 MapReduce 浅析

本小妞迷上赌 提交于 2020-10-30 07:37:43
 

阅读文本大概需要 4 分钟。

 
简介:
每一项新技术都是为了解决某个痛点,随着数据量指数型得增长,面对海量的数据技术,虽然存储用 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 的过程是怎么样的?



孤独才是人生得主旋律



本文分享自微信公众号 - 一起学大数据呀(cjm1540129121)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!