1. MapReduce编程模型
-
MapReduce是采用一种分而治之的思想设计出来的分布式计算框架
-
一些复杂或计算量大的任务,单台服务器无法胜任时,可将此大任务切分成一个个小的任务,小任务分别在不同的服务器上并行的执行;最终再汇总每个小任务的结果
-
MapReduce由两个阶段组 成:Map阶段(切分成一个个小的任务)、Reduce阶段(汇总小任务的结果)。
1.1 Map阶段
-
map()函数的输入是kv键值对,输出是一系列kv键值对,输出结果写入本地磁盘。
1.2 Reduce阶段
-
reduce()函数的输入是kv键值对(即map的输出kv键值对);输出也是一系列kv键值对,最终写入HDFS
2. MapReduce编程案例
2.1 MapReduce原理图
以单词统计为例:
-
block对应一个split分片,一个split对应一个map task
-
reduce task的个数由程序中编程指定
上图有3个Map(split数量=map数量)和3个Reduce加起来就有6个独立的进程空间,当这个MapReduce作业跑起来的时候,需要占用6个进程空间,这些进程(或则说算子)中有可能在同一个节点运行,也有可能都在不同节点上上运行的。
MapReduce计算框架-map执行流程:
MapReduce的数据源是来自HDFS上面的,数据源都是以File的方式表示
通过一个inputFormat类 (这两个功能其实是在inputFormat中封装好的)