写点什么

大数据 -80 Spark 从 MapReduce 到 Spark:大数据处理引擎的三代演进全景解析

作者:武子康
  • 2025-08-28
    山东
  • 本文字数:4529 字

    阅读完需:约 15 分钟

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI 篇持续更新中!(长期更新)

AI 炼丹日志-31- 千呼万唤始出来 GPT-5 发布!“快的模型 + 深度思考模型 + 实时路由”,持续打造实用 AI 工具指南!📐🤖

💻 Java 篇正式开启!(300 篇)

目前 2025 年 08 月 18 日更新到:Java-100 深入浅出 MySQL 事务隔离级别:读未提交、已提交、可重复读与串行化 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解


章节内容

上节我们完成了如下的内容:


  • Kafka 集群监控方案

  • JConsole

  • Kafka Eagle

  • JavaAPI 获取集群指标

简单介绍

在技术的不断迭代中,一路发展,三代技术引擎:


  • MapReduce 昨天

  • Spark 今天

  • Flink 未来


MapReduce 和 Spark 都是类 MR 的处理引擎,底层原理非常相似。

什么是 Spark

Spark 的发展历程如下图:


Spark 核心特点详解

1. 卓越的性能优势

执行速度:Spark 通过内存计算(In-Memory Computing)实现了惊人的性能提升。在内存充足的情况下,Spark 比传统 MapReduce 快 100 倍以上;即使基于磁盘的运算,速度也能快 10 倍左右。例如,在 100GB 数据排序测试中,Spark 仅需 23 分钟,而 Hadoop 需要 72 分钟。


执行引擎:Spark 采用先进的 DAG(有向无环图)执行引擎,通过以下方式优化计算:


  • 自动优化任务调度

  • 减少不必要的中间结果写入磁盘

  • 支持流水线式操作(pipelining)

  • 实现内存缓存机制(RDD persistence)


特别适合迭代式算法(如机器学习)和交互式数据分析场景。

2. 极佳的易用性

多语言支持


  • Scala(原生语言,API 最完整)

  • Java(适合企业级开发)

  • Python(通过 PySpark 提供完整支持)

  • R(通过 SparkR 提供支持)


丰富的算法库:内置超过 80 个高级算法,包括:


  • 机器学习算法(分类、回归、聚类等)

  • 图算法(PageRank、连通分量等)

  • 统计分析工具

  • SQL 查询功能


交互式 Shell:提供 REPL(Read-Eval-Print Loop)环境:


  • Spark-shell(Scala)

  • PySpark(Python)

  • SparkR(R 语言)用户可以直接在命令行与集群交互,快速验证想法。

3. 统一的生态系统

一站式解决方案


  • Spark Core:基础计算引擎

  • Spark SQL:结构化数据处理(兼容 HiveQL)

  • Spark Streaming:微批处理的实时计算

  • MLlib:分布式机器学习库

  • GraphX:图计算框架


应用场景示例


  1. 电商平台可以同时实现:

  2. 用户行为分析(批处理)

  3. 实时推荐系统(流处理)

  4. 用户画像建模(机器学习)

  5. 社交网络分析(图计算)

  6. 金融风控系统可以:

  7. 处理历史交易数据(批处理)

  8. 监控实时交易(流处理)

  9. 训练反欺诈模型(机器学习)

4. 出色的兼容性

资源管理支持:


  • Hadoop YARN(最常用)

  • Apache Mesos

  • Standalone 模式(内置调度器)


数据源兼容


  • Hadoop 生态系统:HDFS、HBase、Hive 等

  • NoSQL 数据库:Cassandra、MongoDB 等

  • 云存储:AWS S3、Azure Blob Storage 等

  • 消息队列:Kafka、Flume 等


部署优势


  1. 无需数据迁移即可使用现有 Hadoop 集群

  2. Standalone 模式只需在机器上安装 Spark 即可运行

  3. 支持 Kubernetes 调度(Spark 2.3+)

  4. 与现有 BI 工具(Tableau、PowerBI 等)无缝集成


特别是在混合云环境中,Spark 可以统一处理:


  • 本地 HDFS 数据

  • 云端对象存储数据

  • 实时流数据源

Spark 与 Hadoop

狭义上

从狭义上看:Hadoop 是一个分布式框架,由存储、资源调度、计算三部分组成 Spark 是一个分布式计算引擎,是由 Scala 编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎。

广义上

从广义上看:Spark 是 Hadoop 生态中不可或缺的一部分。

MapReduce 不足

  • 表达能力有限

  • 磁盘 IO 开销大

  • 延迟高:任务之间有 IO 开销,在前一个任务完成之前,另一个任务无法开始。



相对于 Spark,Spark 的设计要更高效,Spark 在借鉴 MapReduce 优点的同时,很好的解决了 MapReduce 所面临的问题:


两者对比

Spark 的计算模式也属于 MapReduce,是对 MR 框架的优化。


  • 数据存储结构:MapReduce 是磁盘 HDFS,Spark 是内存构建的弹性分布式数据集 RDD

  • 编程范式:Map+Reduce 表达力欠缺,Spark 提供了丰富操作使数据处理代码很短

  • 运行速度:MapReduce 计算中间结果存磁盘,Spark 中间结果在内存中

  • 任务速度:MapReduce 任务以进程,需要数秒启动,Spark 是小数据集读取在亚秒级

大数据处理技术的实际应用与挑战

数据处理场景分类

1. 批量处理(离线处理)

时间跨度:通常在几分钟到数小时之间典型特征:


  • 处理大规模历史数据

  • 对实时性要求不高

  • 高吞吐量优先应用示例:

  • 电商平台每日销售报表生成

  • 银行夜间批量结算处理

  • 社交媒体月度用户行为分析

2. 交互式查询

时间跨度:通常在十秒到数十分钟之间典型特征:


  • 需要快速响应查询请求

  • 支持复杂分析查询

  • 数据量中等规模应用示例:

  • 商业智能仪表盘数据查询

  • 客户行为实时分析

  • 运营数据即时统计

3. 流处理(实时处理)

时间跨度:通常在数百毫秒到数秒之间典型特征:


  • 持续不断的数据流输入

  • 低延迟处理要求

  • 事件驱动处理模式应用示例:

  • 金融交易实时监控

  • 物联网设备数据处理

  • 网站点击流实时分析

主流技术解决方案

批量处理方案

  • MapReduce:经典的分布式计算框架

  • 运行在 Hadoop 生态系统中

  • 采用分而治之的思想

  • 适用于大规模数据并行处理

  • 示例:日志分析、ETL 处理

交互式查询方案

  • Hive:基于 Hadoop 的数据仓库工具

  • 提供类 SQL 查询接口(HQL)

  • 适合结构化数据分析

  • 示例:数据仓库查询、报表生成

  • Impala:实时查询引擎

  • 比 Hive 更快的查询响应

  • 直接访问 HDFS 数据

  • 示例:即席查询、交互式分析

流处理方案

  • Storm:分布式实时计算系统

  • 处理无界数据流

  • 支持多种编程语言

  • 示例:实时推荐系统、异常检测

现有技术架构的挑战

1. 数据共享障碍

  • 不同系统使用不同的数据存储格式

  • MapReduce 通常使用 SequenceFile

  • Hive 使用列式存储格式(如 ORC, Parquet)

  • Storm 处理原始数据流

  • 数据转换带来的开销

  • 需要额外的 ETL 处理步骤

  • 转换过程可能造成数据丢失或失真

  • 增加存储空间需求

2. 系统维护复杂性

  • 多技术栈并存

  • 需要掌握 MapReduce、HiveQL、Storm 等多种编程模式

  • 不同系统的配置和管理方式各异

  • 团队协作成本高

  • 需要专门的批量处理团队、查询团队和流处理团队

  • 团队间沟通协调成本增加

3. 资源管理难题

  • 资源分配不均衡

  • 流处理需要保证低延迟,占用固定资源

  • 批量处理可以容忍资源波动

  • 难以实现动态资源调配

  • 集群利用率低

  • 不同系统资源需求高峰不同

  • 难以实现资源共享和负载均衡

  • 常出现部分资源闲置而其他资源紧张的情况


这些挑战促使了新一代统一数据处理框架(如 Spark、Flink)的发展,它们试图在一个平台上解决上述所有问题。

系统架构

Spark 运行包括如下:


  • Cluster Manager

  • Worker Node

  • Driver

  • Executor


ClusterManager

ClusterManager 是集群资源的管理者,Spark 支持 3 中集群部署模式:


  • Standalone

  • YARN

  • Mesos

WorkerNode

WorkerNode 是工作节点,负责管理本地资源。

Driver Program

运行应用的 main() 方法并且创建了 SparkContext。由 ClusterManager 分配资源,SparkContext 发送 Task 到 Executor 上执行。

Executor

Executor 在工作节点上运行,执行 Driver 发送的 Task,并向 Driver 汇报计算结果。

部署模式

Standalone

  • 独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖其他任何的资源管理系统,从一定程度上说,该模式是其他模式的基础

  • Cluster Manager: Master

  • WorkerNode:Worker

  • 仅支持粗粒度的资源分配方式

SparkOnYARN

  • YARN 拥有强大的社区支持,且逐步成为大数据集群资源管理系统的标准

  • 在国内生产环境中运用最广泛的部署模式

  • SparkOnYARN 支持的两种模式:yarn-cluster(生产环境),yarn-client(交互和调试)

  • Cluster Manager:ResourceManager

  • WorkNode:NodeManager

  • 仅支持粗粒度的资源分配方式

SparkOnMesos

  • 官方推荐模式,Spark 开发之初就考虑到了支持 Mesos

  • Spark 运行在 Mesos 上会更加的灵活,更加自然

  • ClusterManager:MesosMaster

  • WorkNode: MesosSlave

  • 支持粗粒度、细粒度的资源分配方式

粗粒度模式

Coarse-grained Mode:每个程序的运行由一个 Driver 和若干个 Executor 组成,其中每个 Executor 占用若干资源,内部可以运行多个 Task。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中需要一直占用着这些资源,即使不用,最后程序运行结束后,自动回收这些资源。

细粒度模式

鉴于粗粒度模式造成的大量资源的浪费,SparkOnMesos 还提供了另一个调度模式就是细粒度模式。这种模式类似于现在的云计算思想,核心是按需分配。

如何选择

  • 生产环境中原则 YARN,国内使用最广的模式

  • Spark 的初学者,Standalone 模式,简单

  • 开发测试环境可选 Standalone

  • 数据量不太大、应用不复杂,可使用 Standalone

相关术语详解

Application

Application 是指用户提交的 Spark 应用程序,它由集群中的一个 Driver 程序和多个 Executor 组成。一个完整的 Spark 应用通常包括:


  • 数据输入(如 HDFS、Kafka 等)

  • 数据处理逻辑

  • 数据输出(如数据库、文件系统等)


示例场景:一个电商网站的实时推荐系统就是一个 Spark Application,它从用户行为日志中读取数据,进行实时分析处理,最后输出推荐结果。

ApplicationJAR

ApplicationJAR 是包含用户 Spark 应用程序代码的 JAR 包,需要注意:


  1. 必须包含所有用户自定义的类和依赖

  2. 不应包含 Spark 或 Hadoop 的相关 JAR(这些由集群提供)

  3. 通常通过spark-submit命令的--jars参数提交


最佳实践:使用 Maven 或 SBT 构建工具来正确管理依赖关系,避免 JAR 包冲突。

DriverProgram

Driver 程序是 Spark 应用的控制中心,负责:


  • 解析用户代码

  • 创建 SparkContext(Spark 应用的入口点)

  • 将用户程序转换为 DAG(有向无环图)

  • 调度任务到 Executor 执行

  • 收集计算结果

ClusterManager

ClusterManager 负责管理集群资源,主流类型包括:


  1. Standalone 模式:Spark 自带的简单集群管理器

  2. YARN:Hadoop 的资源管理器

  3. 适用于已部署 Hadoop 的环境

  4. 支持动态资源分配

  5. Mesos:通用的集群资源管理器

  6. 可以同时运行多种框架

  7. 提供细粒度和粗粒度两种调度模式

DeployMode

部署模式决定了 Driver 运行的位置:


  • Cluster 模式

  • Driver 在集群内部运行(由某个 Worker 节点托管)

  • 适合长时间运行的作业

  • 客户端可以断开连接而不影响作业运行

  • Client 模式

  • Driver 在提交应用的客户端机器上运行

  • 适合交互式调试

  • 客户端必须保持连接状态

Worker Node

Worker 节点是集群中的工作机器,主要职责:


  • 运行 Executor 进程

  • 向 Master 汇报心跳

  • 执行分配的任务

  • 管理本地存储

Executor

Executor 是运行在 Worker 节点上的进程,每个应用都有独立的 Executor,主要功能:


  • 执行分配给它的 Task

  • 缓存数据(通过 BlockManager)

  • 通过心跳向 Driver 汇报状态

  • 每个 Executor 有固定的 CPU 核心和内存资源


最佳实践:通常建议配置多个 Executor 而不是单个大型 Executor,以提高容错能力。

Task

Task 是 Spark 中最小的执行单元,特点包括:


  • 对应 RDD 的一个分区

  • 由 Executor 执行

  • 包含用户定义的操作(如 map、filter 等)

  • 执行结果会返回给 Driver 或写入外部存储

Job

Job 由 Spark 中的 Action 操作触发产生,特点:


  • 每个 Action(如 collect、count、save 等)都会产生一个 Job

  • 一个应用可能包含多个 Job

  • 按顺序执行(除非使用异步 API)


示例:rdd.count()会触发一个 Job 来计算 RDD 中的元素数量。

Stage

Stage 是 Job 的组成部分,划分依据:


  • 根据 shuffle 操作划分边界

  • 每个 Stage 包含一组可以并行执行的 Task

  • 分为两种类型:

  • ShuffleMapStage(中间结果需要 shuffle)

  • ResultStage(最终结果)


例如:一个包含 map 和 reduceByKey 操作的 Job 会被划分为两个 Stage,map 操作在第一个 Stage,reduceByKey 在第二个 Stage。

发布于: 刚刚阅读数: 3
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-80 Spark 从 MapReduce 到 Spark:大数据处理引擎的三代演进全景解析_scala_武子康_InfoQ写作社区