hadoop-mapreduce
·
MapReduce 是 Hadoop 的核心分布式计算框架,其核心思想是通过 分治(Divide and Conquer) 处理海量数据。以下从技术架构、执行流程、编程模型和特性展开解析:
一、核心设计思想
- 分而治之模型
- Map 阶段:将输入数据拆分为独立分片(默认 128MB),由多个
MapTask并行处理,输出中间键值对(k2, v2)。 - Reduce 阶段:对相同
k2的中间结果聚合,由ReduceTask执行归约操作,生成最终结果(k3, v3)。
关键特性:通过拆分任务实现并行计算,屏蔽分布式细节,开发者只需关注业务逻辑。
- Map 阶段:将输入数据拆分为独立分片(默认 128MB),由多个
二、作业执行流程
- 提交阶段
- 客户端提交作业至 YARN ResourceManager,生成
MRAppMaster(管理任务生命周期)。
- 客户端提交作业至 YARN ResourceManager,生成
- Map 阶段
- map过程:
MapTask读取 HDFS 数据分片,执行用户自定义map()函数,输出中间结果到本地磁盘。 - Shuffle 过程:将 Map 输出的
(k2, v2)按 Key 哈希分区,排序后通过网络传输至 Reduce 节点。
- map过程:
- Reduce 阶段
- Shuffle过程:
ReduceTask拉取同一分区的数据,归并排序。 - reduce过程:执行
reduce()函数聚合结果,写入 HDFS。
- Shuffle过程:
三、编程规范与数据类型
- 编程接口
- Mapper 类:继承
org.apache.hadoop.mapreduce.Mapper,重写map()处理输入(k1, v1)。 - Reducer 类:继承
Reducer,重写reduce()聚合(k2, [v2])。
- Mapper 类:继承
- 数据类型
- 使用 Hadoop 序列化类型(如
IntWritable、Text)替代 Java 原生类型,优化网络传输。
- 使用 Hadoop 序列化类型(如
四、技术优势与局限
| 优势 | 局限性 |
|---|---|
| ▶ 线性扩展性:支持 PB 级数据处理 | ▶ 实时性差:批处理延迟高(分钟级) |
| ▶ 容错机制:自动重启失败任务 | ▶ 小文件性能低:频繁启停 Task 开销大 |
| ▶ 廉价硬件适配:基于普通服务器构建 | ▶ 复杂计算需多轮 Job 串联 |
五、典型应用场景
- 离线批处理:日志分析、数据仓库 ETL。
- 文本处理:倒排索引构建、文档聚类。
- 统计计算:大规模数据聚合(如 WordCount)。
演进方向:新一代计算框架(如 Spark/Flink)继承 MapReduce 分治思想,但引入内存计算和流处理优化实时性。
更多推荐


所有评论(0)