并行计算框架MapReduce编程模型

本文深入解析MapReduce计算框架,阐述其作为并行计算模型及简化分布式编程模式的应用,详细介绍了MapReduce的基本编程模型,包括Map和Reduce函数的工作原理,以及Hadoop MapReduce的并行编程模型和完整编程框架。

一. 简介

MapReduce计算框架是Google提出的一种并行计算框架,是Google云计算模型MapReduce的java开源实现,用于大规模数据集(通常1TB级以上)的并行计算。但其实,MR不仅是一种分布式的运算技术,也是简化的分布式编程模式,是用于解决问题的程序开发模型。

二.MapReduce基本编程模型和框架

  • 一种分布式计算模型,解决海量数据的计算问题
  • MapReduce 将整个并行计算过程抽象到两个函数
    1. Map: 对一些独立元素组成的列表的每一个元素进行指定的操作可以高度的并行
    2. Reduce : 对一个列表的元素进行合并
  • 一个简单的MapReduce 程序只需要指定Map(),Reduce(),Input ,outPut 剩下的事情由框架完成
  • Mapreduce 将作业整个运行过程分为下面两个阶段
    1. map 阶段由一定数量的Task 组成 包括 :
      1. 输入阶段格式解析:InputFormat
      2. 输入数据处理:Mapper
      3. 数据分组:Partitioner
    2. Reduce 阶段由一定数量的ReduceTask 组成:
      1. 数据远程拷贝
      2. 数据按照Key 排序
      3. 数据处理Reducer
      4. 数据输出格式OutputFormat

抽象模型图如下所示:在这里插入图片描述

三. Hadoop的MapReduce的并行编程模型

Hadoop的MapReduce先将数据划分为多个key/value键值对。然后输入Map框架来得到新的key/value对,这时候只是中间结果,这个时候的value值是个集合。再通过同步屏障(为了等待所有的Map处理完),这个阶段会把相同key的值收集整理(Aggregation&Shuffle)在一起,再交给Reduce框架做输出组合,如图2中每个Map输出的结果,有K1,K2,K3,通过同步屏障后,K2收集到一起,K2收集到一起,K3收集到一起,再分别交给Reduce,通过Reduce组合结果。
下面给出一个图解方便更好的理解
在这里插入图片描述

四. Hadoop的MapReduce的完整编程模和框架

Combiner
Combiner可以理解为一个小的Reduce,就是把每个Map结果,先做一次整合。例如图3中第三列的Map结果中有2个good,通过Combiner之后,先将本地的2个goods组合到了一起(红色的(good,2))。好处是大大减少需要传输的中间结果数量,达到网络数据传输优化,这也是Combiner的主要作用。

Partitioner
为了保证所有的主键相同的key值对能传输给同一个Reduce节点,如图3中所有的good传给第一个Reduce前,所有的is和has传给第二个Reduce前,所有的weather,the和today传到第三个Reduce前。MapReduce专门提供了一个Partitioner类来完成这个工作,主要目的就是消除数据传入的Reduce节点后带来不必要的相关性。

在这里插入图片描述
参考 :https://www.cnblogs.com/boothsun/p/7714627.html

欢迎关注,更多惊喜等着你

这里写图片描述

### 并行计算框架 MapReduce 的介绍 MapReduce 是一种用于大规模数据集并行处理的编程模型框架,最初由 Google 提出[^1]。它通过将复杂的并行计算过程简化为两个主要阶段:Map 阶段和 Reduce 阶段,使得开发者可以专注于业务逻辑而不必关心底层实现细节。 #### MapReduce 的基本原理 MapReduce 将整个计算过程分为两大模块: - **Map 阶段**: 负责对输入的数据进行分片、映射以及初步处理。此阶段的核心方法是 `map()` 方法,其作用是对每一条输入记录调用一次该函数,并生成键值对作为中间结果输出[^2]。 - **Reduce 阶段**: 对来自多个 Map 任务产生的中间结果按照相同的 Key 进行聚合操作后再进一步加工得到最终结果。`reduce()` 函数会接收一组共享相同 key 的 value 列表并对它们实施转换或统计等功能[^2]。 此外,在实际应用过程中,除了上述提到的基础功能外,还有许多辅助机制来保障系统的稳定性和高效性,比如自动重试失败的任务节点、动态调整资源分配比例等特性均被集成到 Hadoop 实现版本当中[^3]。 #### 使用教程 以下是利用 Python 编写的一个简单 WordCount 示例: ```python from mrjob.job import MRJob class WordCount(MRJob): def mapper(self, _, line): words = line.split() for word in words: yield (word.lower(), 1) def reducer(self, key, values): yield (key, sum(values)) if __name__ == '__main__': WordCount.run() ``` 这段代码定义了一个继承自 `MRJob` 类的新类 `WordCount` ,其中包含了两个成员函数分别对应 map 和 reduce 步骤的具体行为描述[^4]。 ### 总结 尽管当前存在更多先进的流式处理技术如 Spark Streaming 或 Flink 等替代方案可供选择,但由于其实现理念清晰易懂加上广泛的应用场景支持,学习理解经典版 MapReduce 构建方式仍然具有重要意义[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值