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

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

🚀 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. 金融风控系统可以:

    • 处理历史交易数据(批处理)
    • 监控实时交易(流处理)
    • 训练反欺诈模型(机器学习)

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的资源管理器
    • 适用于已部署Hadoop的环境
    • 支持动态资源分配
  3. Mesos:通用的集群资源管理器
    • 可以同时运行多种框架
    • 提供细粒度和粗粒度两种调度模式

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
  • 分为两种类型:
    1. ShuffleMapStage(中间结果需要shuffle)
    2. ResultStage(最终结果)

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

相关推荐
IT_陈寒31 分钟前
Python开发者必知的5个高效技巧,让你的代码速度提升50%!
前端·人工智能·后端
fanstuck1 小时前
2014-2024高教社杯全国大学生数学建模竞赛赛题汇总预览分析
大数据·人工智能·数学建模·数据挖掘·数据分析
谦行1 小时前
Andrej Karpathy 谈持续探索最佳大语言模型辅助编程体验之路
后端
ALex_zry2 小时前
Golang云端编程入门指南:前沿框架与技术全景解析
开发语言·后端·golang
绝无仅有2 小时前
部署 Go 项目的 N 种方法
后端·面试·github
回家路上绕了弯2 小时前
Dubbo 实战指南:从架构原理到高可用落地,解锁分布式服务治理新能力
后端·dubbo
MaxHua2 小时前
SQL查询优化全指南:从语句到架构的系统性优化策略
后端·数据分析
thesky1234562 小时前
camel agent
大数据·人工智能·深度学习·智能体
新手村-小钻风2 小时前
AI-Agent 深度科普:从概念到架构、应用与未来趋势
大数据·人工智能