文章目录
-
-
-
- [一、Spark 是什么?](#一、Spark 是什么?)
- [二、Spark 的核心优势](#二、Spark 的核心优势)
- [三、Spark 的核心概念](#三、Spark 的核心概念)
- [四、Spark 的主要组件](#四、Spark 的主要组件)
- [五、Spark 的部署模式](#五、Spark 的部署模式)
- [六、Spark 与 Hadoop 的关系](#六、Spark 与 Hadoop 的关系)
- [七、Spark 应用开发流程](#七、Spark 应用开发流程)
- [八、Spark 的应用场景](#八、Spark 的应用场景)
- [九、Spark 版本更新与社区](#九、Spark 版本更新与社区)
-
-
一、Spark 是什么?
Apache Spark 是一个开源的分布式大数据处理引擎,最初由加州大学伯克利分校 AMPLab 开发,2013 年捐赠给 Apache 软件基金会,如今已成为 Apache 顶级项目之一。它以速度快、易用性高、通用性强为核心特点,可用于大规模数据的处理、分析和机器学习等场景。
二、Spark 的核心优势
- 速度快 :
- 基于内存计算(
Memory Computing),数据处理速度比Hadoop MapReduce快10 - 100倍。 - 优化的执行引擎(如
Tungsten优化)和向量化执行,减少CPU开销。
- 基于内存计算(
- 易用性强 :
- 支持多种编程语言:
Scala、Java、Python、R、SQL。 - 提供统一的
API(如 DataFrame/Dataset),简化复杂的数据处理逻辑。
- 支持多种编程语言:
- 通用性高 :
- 集成多种功能模块:
SQL处理(Spark SQL)、流计算(Spark Streaming)、机器学习(MLlib)、图计算(GraphX)。 - 可与
Hadoop生态系统无缝集成(如HDFS、Hive、HBase等)。
- 集成多种功能模块:
- 高容错性 :
- 内置数据分区和副本机制,自动恢复节点故障。
- 通过
Lineage(血统关系)记录数据处理流程,支持高效的容错恢复。
三、Spark 的核心概念
- RDD(Resilient Distributed Dataset)
- 定义 :弹性分布式数据集,是
Spark中最基本的数据抽象,代表一个不可变、可分区、可并行计算的数据集。 - 特点 :
- 支持两种操作:转换(
Transformation,如map、filter)和动作(Action,如collect、count)。 - 基于
Lineage机制,当部分数据丢失时可通过血缘关系重新计算。
- 支持两种操作:转换(
- 定义 :弹性分布式数据集,是
- DataFrame/Dataset
- DataFrame :带有模式(
Schema)的分布式数据集合,类似关系型数据库中的表,支持SQL风格的操作。 - Dataset :
DataFrame的进化版,在DataFrame的基础上增加了类型安全(Type Safety),支持对象操作。
- DataFrame :带有模式(
- SparkSession
Spark 2.0引入的统一入口,整合了SparkContext、SQLContext等组件,用于创建和管理Spark应用程序。
- 任务调度架构
- Driver Program :负责协调
Spark应用的执行,包含main函数和 SparkSession。 - Cluster Manager :资源管理器(如
YARN、Mesos、Spark Standalone)。 - Worker Node :实际执行任务的节点,包含
Executor。 - Executor :运行在
Worker上的进程,负责执行具体的任务(Task),并存储数据到内存或磁盘。 - DAG Scheduler :将作业(
Job)分解为有依赖关系的阶段(Stage)。 - Task Scheduler :将任务分配到
Executor执行。
- Driver Program :负责协调
四、Spark 的主要组件
- Spark Core :提供基础的分布式计算功能,包含
RDD、任务调度、内存管理等核心模块。 - Spark SQL :支持结构化数据处理和
SQL查询,可与Hive集成,处理 HiveQL 语句。 - Spark Streaming :支持实时流数据处理,将流数据分割为微小的批处理作业(如每秒处理一次),称为微批处理(
Micro-Batch)。 - MLlib(Machine Learning Library):提供常用的机器学习算法和工具,如分类、回归、聚类、协同过滤等。
- GraphX:用于图计算和图分析的库,支持构建大规模图结构并执行图算法(如 PageRank、最短路径)。
五、Spark 的部署模式
- Local 模式 :在单节点上运行,用于开发测试,所有组件运行在一个
JVM中。 - Standalone 模式 :
Spark自带的资源管理模式,无需依赖其他集群管理器,简单易用。 - YARN 模式 :运行在
Hadoop YARN上,利用YARN进行资源管理,是生产环境中常用的模式。- Client 模式 :
Driver运行在客户端,适用于交互性任务。 - Cluster 模式 :
Driver运行在YARN集群中,适用于长时间运行的任务。
- Client 模式 :
- Mesos 模式 :运行在
Mesos资源管理器上,支持与其他框架(如Hadoop、Docker)共享资源。
六、Spark 与 Hadoop 的关系
- Hadoop :以
HDFS(分布式文件系统)和MapReduce(批处理计算框架)为核心,适合离线、大规模数据存储和处理。 - Spark :不依赖
HDFS,可直接读取HDFS、S3等存储系统的数据,计算能力更强,适合实时计算、交互式分析和复杂算法。 - 互补关系 :
Spark常与Hadoop结合使用,利用HDFS存储数据,Spark进行计算,形成"存储与计算分离"的架构。
七、Spark 应用开发流程
-
创建 SparkSession :
pythonfrom pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("MySparkApp") \ .master("yarn") \ .getOrCreate() -
加载数据:读取文件、数据库或流数据。
-
处理数据 :使用
DataFrame/Dataset或RDD进行转换和计算。 -
执行动作:将结果收集到驱动程序或保存到外部系统。
-
关闭 SparkSession :
spark.stop()。
八、Spark 的应用场景
- 大数据分析:处理 TB 级以上的数据分析任务,如用户行为分析、日志分析。
- 实时流处理:处理实时数据流,如电商实时推荐、金融交易监控。
- 机器学习:训练大规模机器学习模型,如推荐系统、欺诈检测。
- 图计算:分析社交网络、知识图谱等复杂图结构。
- ETL 任务:提取、转换和加载数据,构建数据仓库。
九、Spark 版本更新与社区
- 最新版本 :截至 2025 年,
Spark最新版本为 3.5.x,持续优化性能、稳定性和新功能(如结构化流增强、AI 集成)。 - 社区活跃:Apache Spark 拥有庞大的开源社区,全球众多企业和开发者参与贡献,文档和教程资源丰富。