MapReduce

MapReduce 是 Hadoop 的核心计算框架,用于分布式处理大规模数据集。它的核心思想是 **"分而治之"**,将任务拆分为多个子任务并行处理,最终汇总结果。以下是其工作原理的详细解析
1. 核心阶段
MapReduce 的执行过程分为三个阶段:  
1. Map 阶段
2. Shuffle & Sort 阶段
3. Reduce 阶段
2. 详细流程
(1) Map 阶段
- 输入分片(Input Splits)
  输入数据被逻辑划分为多个分片(Split),每个分片由一个 Map 任务处理。  
  - 分片大小通常等于 HDFS 块大小(默认 128MB)。  
  - 分片是逻辑划分,实际数据仍在 HDFS 中物理存储。
 
- Map 任务执行 
  - 每个 Map 任务处理一个分片,逐行读取数据。  
  - 调用用户编写的 `map()` 函数,将输入键值对(如 `<行号, 行内容>`)转换为中间键值对(如 `<单词, 1>`)。  
  - 输出中间结果存储在 Map 节点的本地磁盘(而非 HDFS)中。
 
(2) Shuffle & Sort 阶段
- 分区(Partitioning)
  Map 输出的中间键值对按 Key 的哈希值分配到不同的 Reduce 分区(默认使用 `HashPartitioner`)。  
  - 分区数等于 Reduce 任务数(由用户指定)。
- 排序(Sorting)
  每个分区内的数据按键(Key)排序,保证相同 Key 的数据聚集在一起。
 
- 合并(Combiner,可选) 
  本地执行类似 Reduce 的合并操作(如对 `<单词, [1,1]>` 合并为 `<单词, 2>`),减少网络传输量。
 
- 数据拉取(Fetch)
  Reduce 任务从所有 Map 节点拉取属于自己的分区数据。
(3) Reduce 阶段
- 合并与归约
  Reduce 任务将来自不同 Map 的同一分区数据合并,按键分组(如 `<单词, [1,1,1]>`)。  
  - 调用用户编写的 `reduce()` 函数,处理每个键及其值集合(如求和、去重等)。  
  - 最终结果写入 HDFS。
 
---
 
3. 关键机制
 
(1) 容错机制
- Task 重试
  若某个 Map 或 Reduce 任务失败,YARN 会自动在其他节点重新调度该任务。  
- 推测执行(Speculative Execution)
  对执行过慢的任务启动备份任务,取先完成的结果,避免集群资源被拖慢。
(2) 数据本地化优化
- 优先调度
  尽量将 Map 任务调度到存储输入数据的节点,减少网络传输。
 
---
4. 示例:词频统计(WordCount)
1. 输入分片
   将文本文件划分为多个 Split(如 3 个 Split)。  
2. Map 阶段
   每个 Map 处理一个 Split,输出 `<word, 1>`。  
3.Shuffle & Sort
   相同单词的键值对被分配到同一个 Reduce 分区并按字母排序。  
4. **Reduce 阶段**  
   Reduce 对每个单词的 `[1,1,...]` 求和,得到 `<word, total_count>`。
 
---
5. 核心组件角色
| 组件 | 作用 |
|--------------------|------------------------------------------------------------|
| **JobClient** | 提交作业到集群,监控状态。 |
| **ResourceManager**| YARN 的资源调度器,分配容器(Container)。 |
| **NodeManager** | 在节点上启动和管理容器(运行 Map/Reduce 任务)。 |
| **ApplicationMaster**| 协调单个作业的执行,监控任务进度。 |
 
---
 
6. 优缺点
- 优点
  - 线性扩展性:通过增加节点处理 PB 级数据。  
  - 容错性强:自动处理节点故障。  
  - 适合批处理:离线分析大规模静态数据。
 
- 缺点 
  - 延迟高:不适合实时处理。  
  - 中间结果写磁盘:性能不如内存计算框架(如 Spark)。
 
---
 
7. 执行命令示例
提交一个 MapReduce 作业(如 WordCount):
hadoop jar hadoop-mapreduce-examples.jar wordcount /input /output
---
 
通过这种分阶段、分布式的处理方式,MapReduce 能够高效处理海量数据,是 Hadoop 生态的基石之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值