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 执行示例
问题:统计文本文件中每个单词的出现次数
-
输入文件内容:
file1: "Hello World" file2: "Hello Hadoop World"
-
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)]
-
Shuffle 阶段:
- 将相同的键聚合到一起。
[(Hello, [1, 1]), (World, [1, 1]), (Hadoop, [1])]
-
Reduce 阶段:
- 对相同键的值进行归约。
Reducer Output: [(Hello, 2), (World, 2), (Hadoop, 1)]
-
输出文件:
- 最终结果写入分布式存储系统。
Hello 2 World 2 Hadoop 1
MapReduce 的特点
优点:
- 可扩展性:
- 支持数千台节点并行处理大规模数据集。
- 容错性:
- 如果某个节点失败,框架可以重新调度任务到其他节点执行。
- 抽象性:
- 用户只需定义 Map 和 Reduce 函数,底层的并行化和分布式调度由框架处理。
- 数据本地化:
- 任务尽量在数据所在的节点上运行,减少数据传输开销。
- 适合批处理:
- 高效处理离线批量数据分析任务。
缺点:
- 高延迟:
- MapReduce 设计用于批处理任务,不能高效处理实时或低延迟的任务。
- 迭代计算效率低:
- 需要多次读取和写入数据(如机器学习中的迭代算法),效率较低。
- 编程模型简单但受限:
- Map 和 Reduce 模型不适合表达某些复杂的计算逻辑(如 DAG 图结构的任务)。
MapReduce 的应用场景
- 日志分析:
- 统计和分析大规模日志文件,如用户行为日志。
- 文本处理:
- 单词计数、反向索引构建。
- 大数据处理:
- 数据预处理、清洗、转换。
- 图计算:
- PageRank、社交网络分析。
- 机器学习:
- 大规模数据的分布式训练,如矩阵分解、K-means 聚类。
MapReduce 的实现
- Hadoop MapReduce:
- Apache Hadoop 是最常用的 MapReduce 框架,支持大规模分布式计算,使用 HDFS 作为底层存储。
- Google MapReduce:
- 最早的 MapReduce 框架,由 Google 提出,但不公开。
- Spark:
- Apache Spark 提供了更高效的分布式计算框架,通过 RDD 和 DAG 提供对 MapReduce 的扩展。
MapReduce 的工作原理图
-
简单结构图:
Input -> Map -> Shuffle -> Reduce -> Output
-
详细图解:
Input Data | [ Map ] | --> Local Disk (Intermediate Output) [ Shuffle ] | --> Intermediate Grouping [ Reduce ] | Output Data
总结
- MapReduce 是一种简单高效的大数据计算模型,它通过分布式存储和并行计算,解决了大规模数据处理的复杂性问题。
- 通过 Map 和 Reduce 两阶段操作,用户可以轻松完成任务的分解和归约。
- 尽管 MapReduce 在实时计算和复杂计算场景中的效率有限,但其思想为现代分布式计算奠定了基础,仍然是大数据领域的核心模型之一。