MapReduce概述
MapReduce:是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
优点:
- 易于编程:用户只关心业务逻辑,调用框架的接口即可
- 良好的扩展性:可以动态增加服务增加计算资源
- 高容错性:任何一台机器挂掉,可以将任务转移到其他节点
- 适合海量数据计算(TB/PB),几千台服务器共同计算
缺点:
- 不擅长实时计算。不能像Mysql一样处理毫秒级的计算
- 不擅长流式计算。可以用Sparkstreamming、Flink
- 不擅长DAG有向无环图计算。可以用Spark
“不擅长”不代表不能执行,只是没有其他专门的框架做的好。
MapReduce工作流程
MapReduce整体工作流程:(以统计单词个数的 WordCount
程序为例)
MapReduce进程
一个完整的MapReduce程序在分布式运行时有三类实例进程:
- MRAppMaster:负责整个程序的过程调度及状态协调
- MapTask:负责Map阶段的整个数据处理流程
- ReduceTask:负责Reduce阶段的整个数据处理流程
MRAppMaster是Yarn的ApplicationMaster的子类,管理一个任务(job,也称MR)。
MapTask、ReduceTask在进程列表中查不到,他们都属于查到 YarnChild进程。
MapReduce阶段
阶段组成:
- 一个MapReduce编程模型中,只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段;
- 不能有多个map阶段、多个reduce阶段的情景出现
- 如果用户的业务逻辑非常复杂,就只能使用多个MapReduce程序串行执行