MapReduce简介

MapReduce是一种编程模型,用于大规模数据集的离线并行计算。在Hadoop中,Map负责计算,Reduce负责聚合。MapReduce通过拆解、Map计算、洗牌排序和Reduce聚合四个步骤处理数据,尤其适用于离线计算场景,解决了串行计算和单机并行计算的吞吐量限制,是分布式计算框架Hadoop的核心部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是MapReduce

  • 定义:MapReduce是一种编程模型,用于高效地进行大规模数据集的离线并行计算,Map指的是计算工作,Reduce指的是聚合工作。
  • 准则(Hadoop):
  1. 所有计算分解为map或者reduce任务实现
  2. 每个任务处理全部输入数据中的一部分
  3. 主要根据输入数据和输出数据定义任务
  4. 任务依赖于自己的输入数据,不需要与其它任务通信
  • 基本步骤:以统计各个用户总在线时间为例,原始日志文件如下,除了userId和TimeSpent,其它都是无用列

1. 拆解:日志是以行为单位的,各行之间是独立的。这意味着输入文件可以按照任意行数并行处理、独立处理,然后聚合生成相同的结果。现在我们将其切分为4份,分给四台机器。

 

2. Map计算:将map函数写好后交给各个机器,机器会用此函数处理输入,产出结果,结果一般都是键值对集合。

public class Map extends Mapper<LongWritable, Text, Text, LongWritable> {

    protected void map(LongWritable key, Text value,Context context) {

        //...拆解value进行统计,结果写入context

    }

}

3. 洗牌与排序(Hadoop自动执行):各个机器产出结果后,每个reducer被安排一组UserID值,然后从mapper节点复制对应的键值对[k2,v2](洗牌)。然后将结果以UserID为单位进行聚合(排序)。这一过程为Reduce阶段的聚合做准备,过程中不会改变值,只是重新组合数据

4. 正式Reduce聚合:处理[k2,<v2>],进行加总,最终将结果写回到Hadoop

 

为什么要有MapReduce

  • 与在线系统的注重点不同:与在线系统注重响应时间不同,离线计算更需要高吞吐量,所以需要一种专门的工具用于离线计算。
  • 串行计算吞吐量有限:单线程处理大量数据,时间过长。
  • 单机并行计算依旧有限:虽然能充分利用多核,但对于大量的数据,依旧需要很长时间处理。并行化可能受到编程语言设计、存储引擎实现方式、函数库API的限制,效果没有那么理想。
  • 多台机器并行计算:如果只是简单的将切分到多台机器上,聚合环节也需要类似的并行方案。如果运行期间有个线程卡住,有硬盘故障或者出现网络故障,都需要去解决。所以需要很多额外的协调维护工作。分布式计算框架Hdoop应运而生。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值