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 在实时计算和复杂计算场景中的效率有限,但其思想为现代分布式计算奠定了基础,仍然是大数据领域的核心模型之一。
相关推荐
.生产的驴16 分钟前
Elasticsearch 文档批处理 混合处理 批量操作
大数据·后端·elasticsearch·搜索引擎·微信小程序·全文检索·jenkins
drebander35 分钟前
SQL 分析函数与聚合函数的组合应用
大数据·数据库·sql
B站计算机毕业设计超人1 小时前
计算机毕业设计Python动漫推荐系统 漫画推荐系统 动漫视频推荐系统 机器学习 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
大数据·python·深度学习·机器学习·网络爬虫·课程设计·推荐算法
Jim-2ha03 小时前
【踩坑】SparkSQL union/unionAll 函数的去重问题
大数据·spark·scala
GZM8888883 小时前
Elasticsearch Serverless中的数据流自动分片深度解析
大数据·elasticsearch·serverless
.生产的驴4 小时前
Elasticsearch 操作文档对数据的增删改查操作 索引库文档 操作数据 CRUD
大数据·运维·后端·elasticsearch·搜索引擎·全文检索·jenkins
.生产的驴5 小时前
Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查
大数据·spring boot·后端·elasticsearch·搜索引擎·spring cloud·全文检索
Elastic 中国社区官方博客5 小时前
Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)
大数据·数据库·elasticsearch·搜索引擎·docker·云原生·全文检索
非凡的世界5 小时前
Elasticsearch分片数量是什么意思?
大数据·elasticsearch
天氰色等烟雨6 小时前
Prometheus+Grafana监控flink任务指标
大数据