[大数据技术原理与应用笔记] 第七讲 MapReduce

7.1 MapReduce 模型简介

传统数据处理理念: 数据向计算靠拢

MapReduce 理念: 计算向数据靠拢 , 即将应用程序分发到数据所在的机器

具体来说就是当要处理数据块A的时候,将距离数据块A最近的map分配给数据块A,而往往它们是在同一块机器上的

MapReduce 架构: Master/Slave

7.2 MapReduce 体系结构

几个概念

  1. JobTracker
  2. TaskTracker: 接收JobTracker发送的命令执行具体任务,以 心跳的方式 发送资源占用情况及任务运行进度
  3. 资源调度单位: slot (槽),将所有可用的CPU和内存资源打包等分,等分的单位即为slot;同时slot分为 map类型的slot ,用于执行map任务; reduce类型的slot ,用于执行reduce任务,两者互不通用.

7.3 MapReduce 工作流程

一个大数据集分成多个片,每个分片分配一个map执行任务,最后所有map的结果经过分区、排序、合并、归并等操作,称为shuffle,再进行reduce任务。

分片只是 逻辑上的分片 ,而这个分片可能会大于HDFS的一个块的大小,假如两个块不在一个机器上,则还需要跨机器读取,因此一般把分片大小设为一个HDFS块的大小.

Reduce任务数量的设置,取决于可用的reduce slot的数量,比可用的reduce slot少一点

7.4 Shuffle 过程原理

Map端的Shuffle

map任务的结果不直接写入磁盘,而是先写入预先分配的缓存(一般是100MB),减少IO的消耗。

溢写是指,不能等缓存满了才写入磁盘,因为map一直在执行,是不会等写操作的,所以缓存快满的时候,达到一个阈值:溢写比(比如0.8),才会写入磁盘

达到溢写比时也不是直接写入,而是要经过

  1. 分区: 按照不同的reduce任务所需要的数据分区,
  2. 排序: 自动实现,按照<key,value>的key的字典序排序
  3. 合并: 可选,比如相同的key值的value值相加或取最大值

Reduce端的Shuffle过程

reduce端从每个map那对应自己需要数据的分区拉取数据,

如果map shuffle没有经过合并则拿到的是<key,value-list>,如<'a',<1,1,1>>

如果经过合并则是<key, value>

而reduce 拿到map的输出,还会进行归并,把相同键值的value 归并成value-list。 如<'a',1>,<'a',1> 归并为<'a',<1,1>>

7.5 MapReduce 应用程序的执行过程

Master 对应 JobTracker

Worker对应 TaskTracker

MapReduce 产生的中间结果 如缓存,不会写到HDFS,而是直接写入Worker所在的机器的磁盘.

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章