MapReduce 是 Hadoop 的核心分布式计算框架,其核心思想是通过 分治(Divide and Conquer) 处理海量数据。以下从技术架构、执行流程、编程模型和特性展开解析:


一、核心设计思想

  1. 分而治之模型
    • Map 阶段:将输入数据拆分为独立分片(默认 128MB),由多个 MapTask 并行处理,输出中间键值对 (k2, v2)
    • Reduce 阶段:对相同 k2 的中间结果聚合,由 ReduceTask 执行归约操作,生成最终结果 (k3, v3)

    关键特性:通过拆分任务实现并行计算,屏蔽分布式细节,开发者只需关注业务逻辑。


二、作业执行流程

  1. 提交阶段
    • 客户端提交作业至 YARN ResourceManager,生成 MRAppMaster(管理任务生命周期)。
  2. Map 阶段
    • map过程:MapTask 读取 HDFS 数据分片,执行用户自定义 map() 函数,输出中间结果到本地磁盘。
    • Shuffle 过程:将 Map 输出的 (k2, v2) 按 Key 哈希分区,排序后通过网络传输至 Reduce 节点。
  3. Reduce 阶段
    • Shuffle过程:ReduceTask 拉取同一分区的数据,归并排序‌。
    • reduce过程:执行 reduce() 函数聚合结果,写入 HDFS。

三、编程规范与数据类型

  1. 编程接口
    • Mapper 类:继承 org.apache.hadoop.mapreduce.Mapper,重写 map() 处理输入 (k1, v1)
    • Reducer 类:继承 Reducer,重写 reduce() 聚合 (k2, [v2])
  2. 数据类型
    • 使用 Hadoop 序列化类型(如 IntWritableText)替代 Java 原生类型,优化网络传输。

四、技术优势与局限

优势 局限性
▶ 线性扩展性:支持 PB 级数据处理 ▶ 实时性差:批处理延迟高(分钟级)
▶ 容错机制:自动重启失败任务 ▶ 小文件性能低:频繁启停 Task 开销大
▶ 廉价硬件适配:基于普通服务器构建 ▶ 复杂计算需多轮 Job 串联

五、典型应用场景

  1. 离线批处理:日志分析、数据仓库 ETL。
  2. 文本处理:倒排索引构建、文档聚类。
  3. 统计计算:大规模数据聚合(如 WordCount)。

演进方向:新一代计算框架(如 Spark/Flink)继承 MapReduce 分治思想,但引入内存计算和流处理优化实时性。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐