0%

spark简介

spark全面解析:从核心优势到架构与运行模式

Apache Spark 作为大数据领域的主流计算引擎,以其 “快速、通用” 的特性颠覆了传统 MapReduce 的计算范式,成为企业级大数据分析的首选工具。本文从 Spark 的核心优势出发,深入解析其架构组成、核心概念及运行模式,帮助读者建立对 Spark 的系统性认知。

Spark 核心优势:为何超越 MapReduce?

Spark 相较于 Hadoop MapReduce 的革命性提升,源于对大数据计算痛点的精准解决,核心优势体现在以下四方面:

中间结果内存存储,减少磁盘 IO

  • MapReduce 的瓶颈:每轮 Map 任务的中间结果必须写入 HDFS 磁盘,Reduce 任务需从磁盘读取,大量磁盘 IO 导致效率低下。
  • Spark 的优化:将中间结果存储在内存中(仅在内存不足时写入磁盘),通过 DAG(有向无环图)引擎串联多阶段任务,避免重复读写 HDFS。例如,一个包含 3 个阶段的任务,MapReduce 需要写 2 次磁盘,而 Spark 可全程内存流转,效率提升 10~100 倍。

高效的数据格式与内存布局

  • MapReduce 的局限:采用 “Schema On Read” 模式,每次读取数据需重新解析格式,开销大。
  • Spark 的优化
    • 抽象出 RDD(弹性分布式数据集),支持粗粒度写、细粒度读,减少格式解析开销;
    • 允许用户自定义数据分区策略,将关联数据放入同一分区,降低 Shuffle 成本。

灵活的执行策略,避免不必要排序

  • MapReduce 的强制排序:Reduce 阶段默认对数据排序,即使业务无需排序也会产生额外开销。
  • Spark 的优化:支持基于 Hash 的分布式聚合(如 groupByKey),无需排序,适合非排序场景(如计数、求和);通过 DAG 调度器动态优化执行计划,合并相邻任务。

轻量级任务调度,降低启动开销

  • MapReduce 的进程级调度:每个任务启动独立 JVM 进程,启动和切换成本高,适合长任务(小时级)。
  • Spark 的线程级调度:基于 AKKA 事件驱动框架,通过线程池复用线程,任务启动毫秒级响应,支持短任务(分钟级甚至秒级)和迭代计算(如机器学习)。

Spark 生态圈与核心组件

Spark 不仅是一个计算引擎,更是一个完整的大数据处理生态系统,涵盖批处理、流处理、SQL 分析、机器学习等场景。

生态圈核心组件

组件 功能 应用场景
Spark Core 核心引擎,提供 RDD、任务调度、内存管理等基础功能 所有 Spark 应用的基础,支持分布式计算
Spark SQL 结构化数据处理,支持 SQL 和 DataFrame/DataSet API 数据分析、数据仓库(如替代 Hive 计算引擎)
Spark Streaming 实时流处理,基于微批处理模型 日志实时监控、实时推荐、实时风控
MLlib 机器学习库,包含分类、聚类、回归等算法 预测分析、用户画像、异常检测
GraphX 分布式图计算框架 社交网络分析、路径挖掘、关联推荐

核心概念:RDD 与 DStream

  • RDD(弹性分布式数据集)
    Spark 的基础数据结构,是一个不可变、可分区、可并行计算、带容错机制的分布式集合。
    • 核心特性
      • 不可变性:一旦创建无法修改,只能通过转换操作生成新 RDD;
      • 分区机制:数据分散存储在多个分区,可并行处理;
      • 惰性计算:转换操作(如 mapfilter)延迟执行,直到行动操作(如 collectcount)触发;
      • 容错性:通过 lineage(血缘关系)记录依赖,数据丢失时可重算。
  • DStream(离散流)
    Spark Streaming 的核心抽象,代表连续的数据流,本质是一系列时间间隔内的 RDD 序列(微批处理)。例如,每秒接收的日志流会被拆分为 1 秒一个的 RDD 进行处理。

Spark 架构与运行流程

Spark 采用 Master-Slave 架构,结合分布式计算的角色分工,确保任务高效调度和执行。

核心角色与组件

角色 / 组件 功能
Cluster Manager 集群资源管理器,负责分配计算资源(如 CPU、内存)。Standalone 模式中为 Master,YARN 模式中为 ResourceManager
Worker 从节点守护进程,管理本地计算资源,启动 Executor 或 Driver(Standalone 模式)。YARN 模式中对应 NodeManager
Driver 应用程序主控节点,运行 main 方法,创建 SparkContext,负责解析任务、生成 DAG、调度 Stage
Executor 运行在 Worker 上的进程,负责执行 Task,存储中间数据(内存 / 磁盘),每个应用独占一组 Executors
SparkContext 应用程序上下文,连接 Cluster Manager,协调所有组件,控制应用生命周期
DAG Scheduler 将任务解析为基于 Stage 的 DAG,划分任务阶段,提交 Stage 给 TaskScheduler
TaskScheduler 将 Stage 拆分为 Task,分发到 Executor 执行,监控任务状态

任务执行流程

  1. 提交应用:Client 向 Cluster Manager 提交 Spark 应用,指定 Driver 资源。
  2. 启动 Driver:Cluster Manager 在 Worker 节点启动 Driver 进程,Driver 创建 SparkContext。
  3. 申请资源:Driver 向 Cluster Manager 申请 Executor 资源,Cluster Manager 分配 Worker 节点并启动 Executor。
  4. 生成 DAG:Driver 解析应用逻辑,将计算转化为 RDD Graph,由 DAG Scheduler 划分 Stage(按 Shuffle 边界拆分)。
  5. 调度任务:TaskScheduler 将每个 Stage 拆分为 Task,分发到 Executor 执行(每个 Task 处理一个 RDD 分区)。
  6. 执行与反馈:Executor 执行 Task 并汇报结果,Driver 收集结果,完成后释放资源。

Spark 运行模式

Spark 支持多种部署模式,适配不同的集群环境,核心模式如下:

本地模式(Local Mode)

  • 特点:所有进程运行在单个 JVM 中,无集群依赖,适合开发和测试。
  • 启动方式:指定 local[n] 为 Master,n 为并行线程数(如 local[4] 表示 4 线程)。
  • 适用场景:本地代码调试、小数据量测试。

Standalone 模式(独立集群模式)

  • 特点:使用 Spark 内置的 Master-Worker 集群管理资源,无需依赖第三方框架。
  • 架构
    • Master 节点:管理集群资源,接收应用提交;
    • Worker 节点:运行 Executor,汇报资源状态。
  • 适用场景:中小型集群,快速部署,无需整合 Hadoop 生态。

YARN 模式(Spark on YARN)

  • 特点:依赖 Hadoop YARN 进行资源管理,Spark 仅负责任务调度,与 Hadoop 生态无缝集成。
  • 两种部署方式
    • YARN Client:Driver 运行在客户端,适合交互式场景(如 Spark Shell);
    • YARN Cluster:Driver 运行在 YARN 集群中,适合生产环境批量任务。
  • 适用场景:已有机架 Hadoop 集群,需统一管理资源(CPU、内存)。

Mesos 模式(Spark on Mesos)

  • 特点:基于 Mesos 资源管理器,支持细粒度资源调度,适合多框架共享集群(如同时运行 Spark 和 Hadoop)。
  • 适用场景:大型混合集群,追求资源利用率最大化。

云模式(如 Amazon EMR)

  • 特点:部署在公有云平台(如 AWS EMR、阿里云 E-MapReduce),按需弹性扩缩容。
  • 适用场景:无自建集群,需快速启动大规模计算任务。

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10