MapReduce原理和操作

一、MapReduce开发

1. 数据处理的过程(Map+Reduce)

在这里插入图片描述

注意
Job=Map+Reduce,其中Map和Reduce可以有多个,部分情况允许没有Reduce

更详细的基础内容说明:
链接

2. 入门案例

示例

二、MapReduce的高级特性

1. 序列化

说明

  • 定义:将对象转换为字节序列以便在分布式环境中传输、存储和处理。
  • 过程:将对象写入临时存储区或者文件的形式永久保留
  • 反序列化:从存储区中恢复对象的状态,以重新创建

数据类型
在这里插入图片描述

作用

实现自定义的数据类型

实现案例
MapReduce_Writable序列化

2. 排序

规则:

  • 数字:升序
  • 字符串:字典顺序

自定义排序

  1. 创建自定义的排序类YourCompar.class
  2. Main函数设置排序类入口job.setSortComparatorClass(YourCompar.class);
  3. 如果是针对对象的排序,则一般是在实体中继承WritableComparable类重写排序方法compareTo()

实现案例
数字排序
对象排序

3. 分区

规则

在MapReduce中,通过指定分区,可以将同一个分区的数据发送到同一个Reduce任务进行处理。例如,为了进行数据统计,可以将一批类似的数据发送到同一个Reduce任务中,以便在该任务中统计相同类型的数据,从而实现数据分区和统计。简单来说,就是将相同类型或有共性的数据送到一起去处理。

说明

  • Mapreduce中一个分区一般只有一个输出文件
  • 分区是根据Map阶段的输出<K2,V2>决定的

实现案例
分区入门案例

4. Combiner——合并

规则

Combiner本质上是一个“迷你Reduce”过程,它继承自Reducer类,并在Map任务之后、Reduce任务之前运行。Combiner的作用是对每个Map任务的输出进行局部汇总,以减少传输到Reduce任务的数据量。

作用

  • 减少数据传输量:通过局部合并Map任务的输出,Combiner能够显著减少需要通过网络传输到Reduce任务的数据量,从而降低网络IO开销,提高作业执行效率。
  • 优化数据倾斜:在某些情况下,由于数据倾斜问题,部分Reduce任务可能会处理特别大的数据量,导致作业性能下降。Combiner可以在Map阶段对输出结果进行局部汇总,减少倾斜数据的数量,有助于将负载更均衡地分配给不同的Reduce任务。
  • 提高性能:由于Combiner在Map任务的本地执行,它能够利用局部性原理,减少数据传输的网络开销,从而提高整个MapReduce作业的性能。

说明

  1. 运行位置:在Map阶段之后、Reduce阶段之前运行,且通常是在每个Map任务所在的节点上本地化执行。
  2. 1个combiner只能处理单个Map的输出
  3. combiner是可选组件
  4. 一般情况下combiner与reduce使用相同的处理逻辑,以减少计算量。
  5. 部分特定场景中,可能需要注意输入输出格式的不同,数据类型的转换,以及部分汇总与全局汇总的区别,此时combiner和Reduce可能处理逻辑不同
  6. 部分汇总与全局汇总的区别:在某些业务场景中,Combiner可能只需要对局部数据进行简单的汇总(如求和、计数),而Reducer则需要对全局数据进行更复杂的处理(如排序、去重、关联查询等)。

实现案例
Combiner的简单实现

5. Shuffle——洗牌

待更新

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无奈ieq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值