MapReduce
- 一、MapReduce概述
- [二、MapReduce 基本设计思想](#二、MapReduce 基本设计思想)
-
- 分而治之
- [2.2 抽象成模型](#2.2 抽象成模型)
- [2.3 上升到框架](#2.3 上升到框架)
- [三、MapReduce 优缺点](#三、MapReduce 优缺点)
-
- [3.1 MapReduce 的优点](#3.1 MapReduce 的优点)
- [3.1 MapReduce 的缺点](#3.1 MapReduce 的缺点)
- [四、MapReduce 编程模型](#四、MapReduce 编程模型)
-
- [4.1 MapReduce 分布式计算原理](#4.1 MapReduce 分布式计算原理)
- [4.2 MapReduce 编程模型](#4.2 MapReduce 编程模型)
- [4.3 剖析 MapReduce 编程模型](#4.3 剖析 MapReduce 编程模型)
-
- [4.3.1 问题思路分析](#4.3.1 问题思路分析)
- [4.3.2 数据分割](#4.3.2 数据分割)
- [4.3.3 数据处理](#4.3.3 数据处理)
- [4.3.4 数据局部合并](#4.3.4 数据局部合并)
- [4.3.5 数据聚合](#4.3.5 数据聚合)
- [4.4 MapReduce 运行机制](#4.4 MapReduce 运行机制)
- [五、MapReduce 容错](#五、MapReduce 容错)
- [六、 suffle 过程](#六、 suffle 过程)
一、MapReduce概述
MapReduce 是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数据集。
- MapReduce是一个并行程序的计算模型与方法
- MapReduce是一个并行程序运行的软件框架
- MapReduce是一个基于集群的高性能并行计算平台
二、MapReduce 基本设计思想
分而治之
2.2 抽象成模型
2.3 上升到框架
MapReduce 提供统一计算框架的主要目标是实现自动并行化计算,为程序员隐藏系统层面的细节。
- 计算任务的自动划分和调度。
- 数据的自动化分布存储和划分。
- 处理数据与计算任务的同步。
- 结果数据的收集整理,如排序,合并,分区等。
- 系统通信、负载均衡、计算性能优化。
- 处理系统节点出错检测和失效恢复。
三、MapReduce 优缺点
3.1 MapReduce 的优点
- MapReduce易于编程
- 良好的扩展性
- 高容错性
- 适合PB级以上数据集的离线处理
3.1 MapReduce 的缺点
- 不适合实时计算
- 不适合流式计算
- 不适合DAG计算
四、MapReduce 编程模型
4.1 MapReduce 分布式计算原理
4.2 MapReduce 编程模型
4.3 剖析 MapReduce 编程模型
4.3.1 问题思路分析
- 业务场景
有大量的文件,每个文件里面存储的都是单词。 - 我们的任务
统计所有文件中每个单词出现的次数。 - 解决思路
先分别统计出每个文件中各个单词出现的次数,然后再累加不同文件中同一个单词出现次数。
4.3.2 数据分割
4.3.3 数据处理
4.3.4 数据局部合并
4.3.5 数据聚合
4.4 MapReduce 运行机制
五、MapReduce 容错
-
任务容错
当application master被告知一个任务尝试失败后,它将重新调度该任务的执行。application "master会试图避免在之前失败过的NodeManager上重新调度该任务。此外,如果一个任务失败数超过4次,该任务将不会再尝试执行。
-
application master 容错
application master向ResourceManager发送周期性的心跳,当application master失败时ResourceManager将检测到该失败,并在一个新的容器中重新启动一个application master实例。对于新的application master来说,它将使用作业历史记录来恢复失败的应用程序所运行任务的状态,所以这些任务不需要重新运行。
-
NodeManager 容错
如果一个NodeManager节点因中断或运行缓慢而失败,那么它就会停止向ResourceManager发送心跳信息(或者发送频率很低)。默认情况下,如果ResourceManager在10分钟内没有收到一个心跳信息,它将会通知停止发送心跳信息的NodeManager,并且将其从自己的节点池中移除。
在出现故障的NodeManager节点上运行的任何任务或application master,将会按前面描述的机制进行恢复。另外,对于出现故障的NodeManager节点,那么曾经在其上运行且成功完成的map任务,如果属于未完成的作业,那么application master会安排它们重新运行。这是因为它们的中间输出结果是存放在故障NodeManager节点所在的本地文件系统中,reduce任务可能无法访问。
-
ResourceManager 容错
ResourceManager 出现故障是比较严重的,因为没有 ResourceManager,作业和任务容器将无法启动。在默认的配置中,ResorrceManager 是一个单点故障,因为在机器出现故障时,所有的作业都会失败并且不能被恢复。
为了实现高可用(HA),有必要以一种 active-standby 配置模式运行一对 ResourceManager 如果 active ResourceManager出现故障,则 standby ResourceManager 可以很快的接管,并且对客户端来说没有明显的中断现象。