Spark教程1:Spark基础介绍
文章目录
- 一、Spark 是什么?
- 二、Spark 的核心优势
- 三、Spark 的核心概念
- 四、Spark 的主要组件
- 五、Spark 的部署模式
- 六、Spark 与 Hadoop 的关系
- 七、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:
from 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 拥有庞大的开源社区,全球众多企业和开发者参与贡献,文档和教程资源丰富。