MapReduce原理和操作

news/2024/9/25 21:26:40/

目录

  • 一、MapReduce开发
    • 1. 数据处理的过程(Map+Reduce)
    • 2. 入门案例
  • 二、MapReduce的高级特性
    • 1. 序列化
    • 2. 排序
    • 3. 分区
    • 4. Combiner——合并
    • 5. Shuffle——洗牌

一、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——洗牌

待更新


http://www.ppmy.cn/news/1510426.html

相关文章

Linux网络配置和维护命令(一)

文章目录 查看和配置网络接口-ifconfig查看路由表条目-route查看网络连接情况-netstat获取 socket 统计信息-ssss命令与netstat命令的对比拓展&#xff1a;套接字&#xff08;Socket&#xff09;拓展&#xff1a;文件描述符&#xff08;FD&#xff09; 本篇讲解&#xff1a;ifc…

java:实现简单的验证码功能

效果 实现思路 验证码图片的url由后端的一个Controller生成&#xff0c;前端请求这个Controller接口的时候根据当前时间生成一个uuid&#xff0c;并把这个uuid在前端使用localStorage缓存起来&#xff0c;下一次还是从缓存中获取。 Controller生成验证码之后&#xff0c;把前…

C# 一个队列两个线程,一个线程入,一个线程出,数据不一致的原因

在 C# 中&#xff0c;如果你使用一个队列&#xff0c;并且有两个线程分别进行入队和出队操作&#xff0c;可能会遇到数据不一致的问题。这种问题通常是由于并发访问共享资源&#xff08;即队列&#xff09;时没有进行适当的同步引起的。 目录 问题的原因 解决方案 1. 使用线…

fastzdp_sqlmodel 基于SQLModel封装的专用于FastAPI处理MySQL数据库业务的框架

fastzdp_sqlmodel 基于SQLModel封装的专用于FastAPI处理MySQL数据库业务的框架 Github开源地址&#xff1a;https://github.com/zhangdapeng520/fastzdp_sqlmodel 安装 pip install fastzdp_sqlmodel使用教程 创建表 from typing import Optional from sqlmodel import F…

【网格图dp】力扣931. 下降路径最小和

给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列&#xff08;即位于正下方或者沿对角…

鸿蒙开发Location Kit(位置服务)如何设置

鸿蒙Location Kit 是一个强大的位置服务工具包&#xff0c;允许开发者在应用程序中集成精确的定位功能。Location Kit 提供了多种定位模式&#xff0c;支持室内和室外定位&#xff0c;并结合了GPS、Wi-Fi、蓝牙和基站等多种定位技术。 核心功能 精确定位&#xff1a;支持高精…

AI+仿真,助力工业智能化变革:面向仿真工程师的机器学习工具

仿真AI &#xff1f; 企业的仿真工程师大部分时间都是在面对相似的模型。例如空调管路CFD&#xff0c;汽车保险杠CAE的仿真工作&#xff0c;通过DOE设计迭代&#xff0c;不断的优化尺寸参数&#xff0c;产品外形&#xff0c;从而使得管路流动阻力减小&#xff0c;风速均匀性提高…

昂科烧录器支持PAI-IC澎湃微电子的32位微控制器PT32L031K6T6

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中PAI-IC澎湃微电子的32位微控制器PT32L031K6T6已经被昂科的通用烧录平台AP8000所支持。 PT32L031K6T6是基于Cortex-M0内核的一款32位高性能微控制器&#xff0c;支持工作电压 1…