在 Hadoop 平台中,MapReduce 负责处理并行编程中的分布存储、工作调度、负载均衡、容错等工作。
把处理过程高度抽象成 Map 和 Reduce 两个函数。
Map 负责把大的任务分解成多个小任务,Reduce 负责把小任务的处理结果汇总。
Hadoop 中用于执行 MapReduce 的机器有两个:JobTracker 和 TaskTracker。
JobTracker:调度任务。
TaskTracker:跟踪任务的执行情况。
最简单的 MapReduce 程序至少包含3个部分:一个 Map 函数、一个 Reduce 函数、一个 Main 函数。
MapReduce 程序中的数据可以来自多个数据源,如本地文件、数据库、HDFS 等,最常用的是 HDFS。
计算过程
1、拆分数据(split)
属于 Map 阶段。
逐行读取文件数据,得到一系列 Key-Value。
2、执行 Map 函数
将分割好的 Key-Value 交给用户定义的 Map 函数进行处理,形成新的 Key-Value。
3、Map 端排序与合并
Map 端按照 Key 值排序。
执行合并(combine)过程,得到 Map 端的最终输出。
4、Reduce端排序与处理
Reduce 端对从 Map 端接收的数据进行排序。
排序结果交给用户自定义的 Reduce 函数进行处理,得到新的 Key-Value,作为最终结果输出。