大数据技术原理与应用学习笔记(七)
本系列历史文章
大数据技术原理与应用学习笔记(一)
大数据技术原理与应用学习笔记(二)
大数据技术原理与应用学习笔记(三)
大数据技术原理与应用学习笔记(四)
大数据技术原理与应用学习笔记(五)
大数据技术原理与应用学习笔记(六)
MapReduce
MapReduce概述
数据处理能力提升路线有两条:
- 单核→双核→四核……
- 分布式并行处理
模型简介
MapReduce的两大核心就是Map和Reduce,所以MapReduce才用的策略是分而治之的思想,通过切分操作,由每个分片单独启动一个Map任务。由于要处理的数据量一般规模较大,所以MapReduce为了更好地提升性能,采用“计算向数据靠拢”的设计理念。
M/S架构
MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker,Slave上运行TaskTracker。JobTracker负责整个作业调度处理及失败恢复,TaskTracker接受JobTracker的指令并完成。
MapReduce体系结构
MapReduce主要有以下4个部分组成:
Client
- 将用户编写的应用程序通过Client交到JobTracker;
- 通过Client,用户可用接口查看提交作业的运行状态;
JobTracker
- 负责资源监控、作业调度、监控底层TaskTracker及运行的Job的健康情况;
- 一旦失败,把任务转移至其他节点继续跟踪;
TaskTracker
- 执行JobTracker发送的命令
- 把自己的情况通过HeartBeat发送给JobTracker
Task任务
Task的任务包含两个:Map任务和Reduce任务。
可以将资源分为两部分,并用Slot作为资源调度单位,分为MapSlot和ReduceSlot。
MapReduce的工作流程
MapReduce的工作流程可简略如下:
从HDFS来的数据→分片处理→启动对应的Map任务→分成不同区执行Shuffle操作→执行Reduce→输出(至HDFS)
注: 不同的Map(Reduce)间不会通信
执行阶段
数据输入→InputFormat→切分(逻辑分片)→RR(从文件读入)→转入Map(自定义操作)→将获得的中国结果进行Shuffle操作(分区、排序、合并等)→进行Reduce(自定义操作)→输出(OutputFormat)
注:
- 分片数决定Map数(一个块默认分一个片)
- Reduce数取决于Reduce slot数(Reduce数 ≤ Reduce slot数)
Shuffle原理(MapReduce核心)
在Map任务完成后,结果写入缓存中,当缓存数据溢出时,进行分区、排序、合并,并写入磁盘。若磁盘文件较多,则可再合并成大文件。随后通知各Reduce取走(拉回本地进行处理)。
Shuffle又分为两种Shuffle操作:
- Map端Shuffle
- Reduce端Shuffle
Map端Shuffle
- 输入数据和执行Map任务;
- 写入缓存;
- 溢写(分区、排序、合并(可选));
- 文件归并(若磁盘中的溢写文件高于某参数(默认为3),则再次对数据进行合并减少数据量)。
JobTracker检测到一个Map完成后,通知对应Reduce取走。
Reduce端Shuffle过程
- 得到JobTracker通知后,Reduce去各个Map把自己的数据取走,同时每个Reduce通过RPC向JobTracker询问Map是否完成;
- 归并数据,领取到的数据放入缓存,若占满可以溢写,同时还可以归并;
- 数据输入到Reduce。
应用程序
- 用户程序执行,分配到多台机器(1 Master + N Worker),一部分Worker执行Map,一部分Worker执行Reduce;
- 输入文件切分为M个分片,分给N个空闲Worker;
- 执行Map,生成<key,value>形式的中间结果,写至内存缓冲区;
- 写入本地磁盘,划分为R个分区(分配给R个Reduce),并排序;
- Reduce Worker将数据拉回本地进行相关处理;
- 执行Reduce;
- 输出。
MapReduce编程实践
关于MapReduce编程实践可参考厦大数据库博客:MapReduce编程实践(Hadoop3.1.3)