MapReduce 简介
MapReduce 是一种编程模型,是一种编程方法,是抽象的理论。
YARN 概念
YARN 是 Hadoop 2.0 版本以后的资源管理器,即 MapReduce 2.0,相比于 1.0 版本,架构中的各个模块分工明确,在性能和稳定性上都有所提升。YARN 负责整个集群资源的管理和调度,也就是说所有的 MapReduce 都需要通过它来进行调度,支持多种计算框架。
YARN 架构图
YARN 的几个概念:
- ResourceManager
- ApplicationMaster
- NodeManager
1、ResourceManager
- 负责接受客户端提交的 job,分配和调度资源
- 启动 ApplicationMaster,判断 job 所需资源
- 监控 ApplicationMaster,在其失败的时候进行重启
- 监控 NodeManager
2、ApplicationMaster
- 为 MapReduce 类型的程序申请资源,并分配任务
- 负责相关数据的切分
- 监控任务的执行及容错
3、NodeManager
- 管理单个节点的资源,向 ResourceManager 进行汇报
- 接收并处理来自 ResourceManager 的命令
- 接收并处理来自 ApplicationMaster 的命令
MapReduce 编程模型
- 场景:输入一个大型文件,通过 split 将其分成多个文件分片
- Map:每个文件分片由单独的机器进行处理,这就是 Map 方法
- Reduce:将各个机器的计算结果进行汇总,得到最终的结果,这就是 Reduce 方法
Map 任务处理
- 读取输入文件的内容,解析成键值对,把文件的每一行解析成键值对,每个键值对调用一次 map 函数;(Input)
- 写自定义的逻辑,对输入的键值对进行处理,转换成新的键值对输出;(Map)
- 对不同分区的数据,按照键(key)进行排序和分组,key 相同的值(value)放到一个集合中;(Sort -> Combine)
- 把输出的键值对(此时只是中间结果)按照 key 的范围进行分区处理;(Partition)
- 分组后的数据进行 reduce 处理。
Reduce 任务处理
- 对多个 map 任务的输出,按照不同分区,通过网络 copy 到不同的 reduce 节点;
- 对多个 map 任务的输出进行合并和排序,自定义 reduce 函数的逻辑,对输入的键(key)和值(value)进行处理,转换成新的键值对输出;(Reduce)
- 把 reduce 的输出保存到文件中。(Output)
MapReduce 的整个工作流程可以归结为:
Input -> Map -> Sort -> Combine -> Partition -> Reduce -> Output