MapReduce 是一种用于处理大规模数据集的编程模型和计算框架。它的核心思想是将复杂的计算任务分解为两个简单的阶段:Map(映射) 和 Reduce(归约)。通过这种方式,MapReduce 可以高效地并行处理海量数据。
一.MapReduce 的核心概念
1.Map(映射):
- 将输入数据分割成小块,并对每个小块进行初步处理。
- 输出键值对(key-value pairs),例如
<单词, 出现次数>
。
2.Shuffle 和 Sort(洗牌和排序):
- 将 Map 阶段的输出按照键(key)进行排序和分组。
- 确保相同键的数据被发送到同一个 Reduce 任务。
3.Reduce(归约):
- 对 Map 阶段的输出进行汇总和计算。
- 生成最终的结果,例如每个单词的总出现次数。
二.MapReduce特点
-
编程模型简单:用户只需编写 Map 和 Reduce 两个函数,框架负责任务调度、数据分发和故障恢复。
-
横向扩展:MapReduce 可以在数千台机器上运行,处理 PB 级甚至 EB 级数据。可以根据需求动态增加或减少集群规模。
-
高容错性:如果某个任务失败,MapReduce 会自动重新调度该任务,确保计算任务的完成。
-
大规模数据处理:MapReduce 特别适合处理离线批处理任务,如日志分析、数据挖掘等。
-
高吞吐量:通过并行计算,MapReduce 可以高效地处理大规模数据。
三.MapReduce缺点
- 不适合实时计算:MapReduce 的设计目标是批处理,不适合实时或低延迟的场景。
-
流处理能力有限:虽然可以通过工具(如 Spark Streaming)实现流处理,但原生 MapReduce 的流处理能力较弱。