MapReduce vs Tez vs Spark:分布式计算框架深度对比

一、架构设计对比

1.1 核心架构模型

Spark
Tez
MapReduce
直接边
内存缓存
RDD Transformation
Data Source
RDD Transformation
Action
Result
Vertex 1
Input
Vertex 2
Vertex 3
Output
Map Phase
Input
Shuffle/Sort
Reduce Phase
Output

1.2 架构特性对比

特性 MapReduce Tez Spark
执行模型 严格Map-Shuffle-Reduce 动态DAG(有向无环图) 弹性分布式数据集(RDD/Dataset)
数据交换 磁盘Shuffle 内存/磁盘混合 内存优先,磁盘备用
任务调度 JobTracker(MR1)/YARN(MR2) YARN Application Master Spark Driver
容错机制 任务重试 任务重试 血统(Lineage)+检查点
编程接口 Java API Java API Scala/Java/Python/R

二、执行模型深度解析

2.1 MapReduce 执行流程

Input Map Disk Reduce Output 分片数据 写入中间结果(分区排序) Shuffle读取 写入最终结果 Input Map Disk Reduce Output

关键瓶颈:多次磁盘IO导致高延迟

2.2 Tez 执行模型

直接边
广播边
Input
Mapper Vertex
Reducer Vertex
Join Vertex
Output

优化点

  • 运行时动态构建DAG
  • 避免不必要的阶段
  • 容器复用减少启动开销

2.3 Spark 执行模型

转换
缓存
转换
Action
初始RDD
RDD2
内存
RDD3
Result

核心优势

  • 内存计算减少IO
  • 懒执行优化整体计划
  • 阶段划分自动优化

三、性能指标对比

3.1 基准测试数据(100TB数据集)

指标 MapReduce Tez Spark
任务启动时间 30秒 5秒 2秒
Shuffle数据量 100TB 80TB 60TB
执行时间 120分钟 75分钟 45分钟
CPU利用率 35% 55% 70%
磁盘IO 180TB 90TB 25TB

3.2 性能特点雷达图

radarChart
    title 性能特点对比
    axis 延迟,吞吐量,内存效率,易用性,生态集成
    "MapReduce" [3, 8, 4, 5, 9]
    "Tez" [6, 7, 6, 6, 7]
    "Spark" [9, 9, 8, 9, 8]

四、适用场景分析

4.1 MapReduce 最佳场景

超大规模批处理
MapReduce
ETL数据转换
遗留系统兼容
成本敏感型集群

典型用例

  • 每日TB级日志处理
  • 历史数据归档转换
  • 兼容Hadoop 1.x环境

4.2 Tez 最佳场景

Hive交互查询
Tez
复杂DAG作业
低内存环境
增量计算

典型用例

  • Hive LLAP实时查询
  • 多阶段ETL流水线
  • 资源受限集群
  • 需要动态优化的作业

4.3 Spark 最佳场景

迭代计算
Spark
实时流处理
机器学习
图计算
交互式分析

典型用例

  • 推荐系统训练
  • 实时风控分析
  • 图神经网络计算
  • 数据湖交互查询

五、编程模型对比

5.1 代码复杂度比较

WordCount示例

// MapReduce
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);

// Tez (通过Hive)
ADD JAR wordcount.jar;
CREATE FUNCTION wordcount AS 'com.example.WordCountUDF';

// Spark
val counts = textFile.flatMap(line => line.split(" "))
                    .map(word => (word, 1))
                    .reduceByKey(_ + _)

5.2 API丰富度

API类型 MapReduce Tez Spark
SQL支持 Hive集成 Hive集成 Spark SQL
流处理 Structured Streaming
机器学习 Mahout MLlib
图计算 GraphX
库生态系统 有限 有限 丰富(6000+包)

六、集群资源管理

6.1 资源利用率对比

集群资源
MapReduce
Tez
Spark
资源利用率 30-40%
资源利用率 50-65%
资源利用率 70-85%

6.2 内存管理机制

框架 内存模型 优化建议
MapReduce 固定Slot 增加Reduce槽位比例
Tez 动态容器 调优容器大小,启用容器复用
Spark 统一内存池 调整storage/execution内存比例

配置示例

# Tez容器复用
set hive.tez.container.size=8192; # 8GB容器
set hive.tez.container.reuse=true; 

# Spark内存优化
spark.executor.memory=12g
spark.memory.fraction=0.6

七、容错机制对比

7.1 故障恢复策略

故障类型 MapReduce Tez Spark
Task失败 重试4次 重试3次 基于血统重新计算
节点故障 重新调度 重新调度 重新调度+检查点恢复
数据丢失 重新读取 重新读取 血统重建
Driver失败 作业失败 作业失败 Cluster模式可恢复

7.2 检查点机制

Spark Storage Task 定期写入检查点 发生故障 恢复RDD状态 从检查点重启任务 Spark Storage Task

优势

  • 避免长血统链的开销
  • 快速恢复迭代计算状态
  • 减少数据重算成本

八、生态集成能力

8.1 Hadoop生态集成

Hive on Spark
HDFS
MapReduce
Tez
Spark
YARN
Hive
Pig

8.2 云原生支持

框架 Kubernetes支持 云存储集成 Serverless部署
MapReduce 有限 HDFS为主 不适用
Tez YARN on K8s 对象存储 部分支持
Spark 原生支持 Alluxio+对象存储 完全支持

九、选型决策指南

9.1 技术选型矩阵

场景需求 推荐框架 理由
超大规模批处理 MapReduce 稳定性高,资源要求低
Hive交互式查询 Tez 启动快,优化器智能
迭代机器学习 Spark 内存计算效率高
流批一体化 Spark Structured Streaming成熟
成本敏感型部署 Tez 内存需求低,容器复用
多云环境部署 Spark Kubernetes原生支持

9.2 混合架构实践

离线作业
ETL流水线
机器学习
交互查询
实时API
流处理
数据湖存储
批处理层
服务层
MapReduce
Tez
Structured Streaming
Presto
实时数据

配置建议

  • 批处理:MapReduce/Tez处理历史数据
  • 交互分析:Tez执行Hive查询
  • 实时处理:Spark Streaming
  • 机器学习:Spark MLlib

十、未来演进方向

10.1 技术演进趋势

稳定性
Hive集成
统一引擎
MapReduce
归档处理
Tez
实时数仓
Spark
全栈平台
云存储
湖仓一体
AI融合

10.2 框架定位预测

时间轴 MapReduce Tez Spark
2023 遗留系统维护 Hive默认引擎 主流计算平台
2025 特定场景使用 优化器增强 统一SQL引擎
2030 逐步淘汰 实时分析专用 AI基础设施

架构师洞察

  1. MapReduce:仍是大数据领域的"瑞士军刀",尤其适合超大规模、成本敏感的批处理场景
  2. Tez:作为Hive的最佳执行引擎,在交互查询和复杂DAG场景表现卓越
  3. Spark:已发展成统一的分析引擎,在流处理、机器学习领域具有绝对优势

黄金法则:

  • 批处理:TB级以下用Spark,PB级考虑MapReduce
  • 交互查询:Hive+Tez是最经济选择
  • 实时分析:首选Spark Structured Streaming
  • 混合负载:YARN集群同时部署三种框架,按需调用
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐