MapReduce简介

目录

MapReduce思想核心

MapReduce设计构思

使用MapReduce进行单词统计原理

MapReduce基本原理

执行过程


MapReduce思想核心

先分再合,分而治之

把一个复杂的问题按一定的"分解"方法分为规模较小的若干部分,分别找出各个部分的解,再把各部分的解组成整个问题的解。

map特点

①分的阶段,局部并行运算

②把复杂任务拆分成若干个小的任务,以并行方式处理,每个任务处理完都是一个局部的结果。

③前提是任务可以拆分,且拆分后没有依赖关系

④map侧重于映射(对应关系)

reduce特点

①汇总阶段,全局汇总计算

②把分的阶段局部结果进行全局汇总,得到最终结果

③reduce指的是结果数量的减少,汇总

MapReduce设计构思

MapReuce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。

①构建抽象模型

map:对一组数据元素进行某种重复式的处理;

reduce:对map的中间结果进行某种进一步的结果整理

②MapReduce处理的数据类型是<key,value>键值对,定义了两个抽象的编程接口,由用户去编程实现:

③统一架构,隐藏系统层细节

MapReduce设计并提供了统一的计算框架,隐藏了绝大多数系统层面的处理细节(如数据存储、分发、结果收集等)。

通过抽象模型和计算框架把需要做什么和具体怎么做分开了,为程序员提供一个抽象和高层的编程接口和框架。程序员仅需要关心应用层的具体计算问题。

使用MapReduce进行单词统计原理

map阶段处理逻辑

根据分隔符切割内容变成一个个单词,把单词标记1,变成<key,value>键值对形式

reduce阶段处理逻辑

经过shuffle把相同的单词分为一组,把对应的value进行累加,输出的结果就是该单词出现的总次数

MapReduce基本原理

MapReduce输入和输出

关于input

指向的是一个文件,mr就处理这一个文件

指向的是一个目录,mr就处理该目录下的所有的文件整体当作数据集处理

关于output

要求指定的目录为空目录不能够存储,否则执行校验失败

执行过程

Map阶段执行过程

第一阶段

把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认情况下,Split size = Block size。每一个切片由一个MapTask处理。(getSplits)

第二阶段

对切片中的数据按照一定的规则解析成<key,value>对。默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(单位是字节),value是本行的文本内容。(TextInputFormat)

第三阶段

调用Mapper类中的map方法。上阶段中每解析出来的一个<key,value>,调用一次map方法。每次调用map方法会输出零个或多个键值对。

第四阶段

按照一定的规则对第三阶段输出的键值对进行分区。默认有一个区。分区的数量就是Reducer任务运行的数量。默认有一个Reducer任务。

第五阶段

对每个分区中的键值对进行排序。首先,按照键值对进行排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>,<1,3>,<2,1>,键和值分别是整数。排序后的结果是<1,3><2,1><2,2>

#如果没有第六阶段,直接输出文件

第六阶段

对数据进行局部聚合处理(combiner处理)。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少。本阶段默认没有。

Reduce阶段执行过程

第一阶段

Reducer任务会主动从Mapper任务赋值其输出的键值对,Mapper任务可能会有很多,因此Reducer会赋值多个Mapper的输出。

第二阶段

把复制到Reducer本地数据全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。

第三阶段

对排序后的键值对调用reduce方法。键相等的键值对调用一次,每次调用会产生零个或多个键值对。最后把这些输出的键值对写入到HDFS文件中。

Shuffle机制

map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,,一般也把Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。

核心机制:数据分区,排序,合并

Collect阶段

将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等。

Spill阶段

当内存的数据量达到一定的阈值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。

Merge阶段

把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。

相关推荐
武子康17 分钟前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康1 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天1 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库5 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟5 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人5 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长5 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计