当前位置: 首页 > article >正文

MapReduce相关概念(自用)

MapReduce:分布式计算模型

MapReduce 是一种分布式计算模型,由 Google 在 2004 年提出,用于大规模数据集(TB 或 PB 级别)的分布式处理。它通过简单的编程模型,将复杂的分布式计算分解为两个基本阶段:Map(映射)Reduce(归约)。这种模型高度抽象了并行计算的复杂性,用户只需关注具体的任务逻辑,底层的分布式计算由框架完成。


MapReduce 的核心思想

  • 分而治之:将计算任务分割成小的子任务并分发到多个节点并行处理。
  • 键值对处理:输入数据和输出数据都以 键值对 (key-value pairs) 的形式组织,方便分布式存储和处理。
  • 两阶段操作
    • Map 阶段:对输入数据进行预处理,产生中间键值对。
    • Reduce 阶段:对 Map 阶段生成的中间键值对进行归约(聚合)。

MapReduce 的执行流程

1. 输入数据

输入数据通常以 分布式文件系统(如 HDFS) 存储的大文件形式存在,数据会被划分为多个块(Block)存储在不同的节点上。

2. Map 阶段
  • 输入:分块后的数据,每个块由 Map Task 处理。
  • 过程
    • 每个 Map Task 从输入数据中读取一部分数据并进行处理。
    • 输出的是一组 中间键值对 (key, value)
    • 框架会根据键值对的键(Key)进行分区,以确保相同键的值(Value)会被分配到同一个 Reduce Task
  • 输出:中间的键值对。
3. Shuffle 阶段
  • 过程
    • 将 Map 阶段的输出重新组织,相同键的值(Value)会被聚合到一起。
    • Shuffle 阶段包括 排序(Sort)分组(Group) 两个子过程。
  • 输出:每个 Reduce Task 接收的键值对(相同键聚合在一起)。
4. Reduce 阶段
  • 输入:由 Shuffle 阶段分发的键值对。
  • 过程
    • 每个 Reduce Task 对相同键的值进行聚合处理。
    • 用户定义的 Reduce 函数在这里执行聚合逻辑。
  • 输出:最终的计算结果(通常也是键值对形式)。
5. 输出数据

Reduce 阶段的结果会被写回到分布式文件系统中,供后续使用。


MapReduce 执行示例

问题:统计文本文件中每个单词的出现次数
  1. 输入文件内容

    file1: "Hello World"
    file2: "Hello Hadoop World"
    
  2. Map 阶段

    • 每个 Map Task 读取一部分数据,输出键值对。
    Mapper 1 Input: file1
    Mapper 1 Output: [(Hello, 1), (World, 1)]
    
    Mapper 2 Input: file2
    Mapper 2 Output: [(Hello, 1), (Hadoop, 1), (World, 1)]
    
  3. Shuffle 阶段

    • 将相同的键聚合到一起。
    [(Hello, [1, 1]), (World, [1, 1]), (Hadoop, [1])]
    
  4. Reduce 阶段

    • 对相同键的值进行归约。
    Reducer Output: [(Hello, 2), (World, 2), (Hadoop, 1)]
    
  5. 输出文件

    • 最终结果写入分布式存储系统。
    Hello 2
    World 2
    Hadoop 1
    

MapReduce 的特点

优点
  1. 可扩展性
    • 支持数千台节点并行处理大规模数据集。
  2. 容错性
    • 如果某个节点失败,框架可以重新调度任务到其他节点执行。
  3. 抽象性
    • 用户只需定义 Map 和 Reduce 函数,底层的并行化和分布式调度由框架处理。
  4. 数据本地化
    • 任务尽量在数据所在的节点上运行,减少数据传输开销。
  5. 适合批处理
    • 高效处理离线批量数据分析任务。
缺点
  1. 高延迟
    • MapReduce 设计用于批处理任务,不能高效处理实时或低延迟的任务。
  2. 迭代计算效率低
    • 需要多次读取和写入数据(如机器学习中的迭代算法),效率较低。
  3. 编程模型简单但受限
    • Map 和 Reduce 模型不适合表达某些复杂的计算逻辑(如 DAG 图结构的任务)。

MapReduce 的应用场景

  1. 日志分析
    • 统计和分析大规模日志文件,如用户行为日志。
  2. 文本处理
    • 单词计数、反向索引构建。
  3. 大数据处理
    • 数据预处理、清洗、转换。
  4. 图计算
    • PageRank、社交网络分析。
  5. 机器学习
    • 大规模数据的分布式训练,如矩阵分解、K-means 聚类。

MapReduce 的实现

  1. Hadoop MapReduce
    • Apache Hadoop 是最常用的 MapReduce 框架,支持大规模分布式计算,使用 HDFS 作为底层存储。
  2. Google MapReduce
    • 最早的 MapReduce 框架,由 Google 提出,但不公开。
  3. Spark
    • Apache Spark 提供了更高效的分布式计算框架,通过 RDD 和 DAG 提供对 MapReduce 的扩展。

MapReduce 的工作原理图

  1. 简单结构图

    Input -> Map -> Shuffle -> Reduce -> Output
    
  2. 详细图解

    Input Data
        |
    [ Map ]
        |          --> Local Disk (Intermediate Output)
    [ Shuffle ]
        |          --> Intermediate Grouping
    [ Reduce ]
        |
    Output Data
    

总结

  • MapReduce 是一种简单高效的大数据计算模型,它通过分布式存储和并行计算,解决了大规模数据处理的复杂性问题。
  • 通过 MapReduce 两阶段操作,用户可以轻松完成任务的分解和归约。
  • 尽管 MapReduce 在实时计算和复杂计算场景中的效率有限,但其思想为现代分布式计算奠定了基础,仍然是大数据领域的核心模型之一。

http://www.kler.cn/a/460612.html

相关文章:

  • linux 软链接 快捷方式 详解
  • Linux -- 单例模式
  • STM32 + 移远EC800 4G通信模块数传
  • springboot525基于MVC框架自习室管理和预约系统设计与实现(论文+源码)_kaic
  • 二十三种设计模式-工厂方法模式
  • checked 溢出问题
  • 抖音电商全年销售154亿单产业带商品,830个产业带销售额过亿
  • 【每日学点鸿蒙知识】箭头函数、Watch状态变量、H5获取定位数据、前后台切换、长按事件
  • HarmonyOS Next 应用元服务开发-应用接续动态配置迁移快速启动目标应用
  • 【linux学习指南】Ext系列文件系统(二)引⼊⽂件系统“块“分区inode概念
  • 老年认知衰弱分类模型在临床即时检测系统中的应用
  • R语言文件IO和并行计算优化实践
  • 在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】
  • 大语言模型(LLM)一般训练过程
  • 压测--使用jmeter、nmon、nmon analysis进行压测与分析
  • 开源AI智能名片2+1链动模式O2O商城小程序:以情感共鸣驱动用户归属与品牌建设的深度探索
  • 视频首页uniapp
  • MySQL三层B+树能存多少数据
  • HttpServlet类的继承与doGet、doPost等方法的重写
  • Docker搭建Skywalking
  • 基于云计算的大数据项目实训室创新建设方案
  • 2025决战智驾:从中阶卷到L3,车企需要抓好一个数据闭环
  • 力扣面试题 - 40 迷路的机器人 C语言解法
  • Golang 中 Goroutine 的调度
  • 点跟踪基准最早的论文学习解读:TAP-Vid: A Benchmark for Tracking Any Point in a Video—前置基础
  • vue3 mounted 中调用 异步函数