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

7.1 MapReduce 模型简介

传统数据处理理念: 数据向计算靠拢
MapReduce 理念: 计算向数据靠拢 , 即将应用程序分发到数据所在的机器
具体来说就是当要处理数据块A的时候,将距离数据块A最近的map分配给数据块A,而往往它们是在同一块机器上的

MapReduce 架构: Master/Slave
1581484849(1).png

7.2 MapReduce 体系结构

1581485105(1).png

几个概念

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

7.3 MapReduce 工作流程

1581498098(1).png

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

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

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

7.4 Shuffle 过程原理

Map端的Shuffle

微信截图_20200212172031.png
map任务的结果不直接写入磁盘,而是先写入预先分配的缓存(一般是100MB),减少IO的消耗。
溢写是指,不能等缓存满了才写入磁盘,因为map一直在执行,是不会等写操作的,所以缓存快满的时候,达到一个阈值:溢写比(比如0.8),才会写入磁盘
达到溢写比时也不是直接写入,而是要经过

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

微信截图_20200212173152.png
reduce端从每个map那对应自己需要数据的分区拉取数据,
如果map shuffle没有经过合并则拿到的是,如<'a',<1,1,1>>
如果经过合并则是
而reduce 拿到map的输出,还会进行归并,把相同键值的value 归并成value-list。 如<'a',1>,<'a',1> 归并为<'a',<1,1>>

7.5 MapReduce 应用程序的执行过程

微信截图_20200212174356.png

Master 对应 JobTracker
Worker对应 TaskTracker

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

你可能感兴趣的:(mapreduce)