Spark 概述
1. 什么是 Spark
Spark 是一个开源的大数据处理框架,专注于 内存计算,提供了更高效的数据处理能力。与传统基于磁盘的 Hadoop MapReduce 相比,Spark 使用内存作为数据处理的中介,极大提高了数据分析和处理的速度。它是一种 快速、通用 和 可扩展 的大数据分析计算框架。
- 快速:Spark 的核心特性是内存计算,能将任务执行速度提升 10 倍以上。它支持批处理和流处理。
- 通用:Spark 不仅限于批量数据处理,它支持 SQL 查询、流处理、机器学习、图计算等多种任务。
- 可扩展:Spark 具有很好的扩展性,能够在大规模集群上处理海量数据。
2. Spark 和 Hadoop 的历史
- Hadoop:由 Apache 基金会维护的开源框架,用于存储和处理大规模数据。Hadoop 的 MapReduce 计算模型主要基于磁盘存储,处理效率较低。
- Spark:Spark 于 2009 年由加州大学伯克利分校的 AMP 实验室开发,旨在克服 Hadoop MapReduce 的低效问题。它提供了基于内存的计算模型,使得数据处理更加高效。Apache Spark 于 2013 年成为 Apache 的顶级项目,现在已经成为最流行的大数据处理引擎之一。
Hadoop 专注于 海量数据的存储 和 分析计算,而 Spark 则进一步优化了 计算,专注于加速数据的处理速度。
3. Spark 内置模块
Spark 是一个功能非常强大的框架,除了核心的计算引擎之外,还包含了多个内置模块,分别支持不同类型的计算任务。

Spark 内置模块示意图
1. Spark Core
Spark Core 是 Spark 框架的基础部分,提供了 Spark 的基本功能,如任务调度、内存管理、容错机制、存储管理等。它支持弹性的分布式数据集(RDD),允许用户执行分布式计算操作。
2. Spark SQL
Spark SQL 是用于结构化数据处理的模块。它支持通过 SQL 或者 DataFrame API 进行查询,能够与传统的 SQL 查询系统集成,并可以与 Hive、Parquet 等数据源结合使用。
3. Spark Streaming
Spark Streaming 支持实时流数据处理。它可以从各种数据源(如 Kafka、Flume、HDFS 等)接收数据,并实时处理和分析。
4. MLlib
MLlib 是 Spark 提供的机器学习库,支持常见的机器学习算法,包括分类、回归、聚类、降维等。MLlib 的设计目标是高效且易于扩展,能够处理大规模数据集。
5. GraphX
GraphX 是 Spark 用于图处理的组件。它将图数据模型与并行计算引擎相结合,支持图形算法(如 PageRank 等)的高效分布式执行。
补充整理:
-
Hadoop 与 Spark 的对比:
- Hadoop MapReduce:以磁盘为基础的计算模式,适合处理离线批量数据,处理速度较慢。
- Spark:基于内存的计算模式,更加高效,尤其适合实时数据处理和复杂的分析任务。
-
分布式计算的演变:
- Hadoop 专注于海量数据的存储和处理,但存在 IO 瓶颈(主要是磁盘读写)。
- Spark 通过在内存中进行数据操作,大大提高了数据处理的速度。它支持更多样化的计算任务,如实时流数据处理、机器学习等。
-
扩展性与应用场景:
- Spark 能够在小型单机环境中运行,也能扩展到大型集群中。适用于各种大数据场景,如 ETL(数据抽取、转换、加载)、实时数据分析、机器学习模型训练等。
- Spark 与 Hadoop HDFS 集成良好,HDFS 负责数据存储,Spark 负责计算;此外,Spark 还能与 Kafka、Cassandra、HBase 等其他分布式系统集成。
Spark的特点
1. 速度快
- Spark支持内存计算,并且通过DAG(由向无环图)执行引擎支持无环数据流,所以计算同样的任务在内存中比Hadoop的MR快100左右,在硬盘中快10倍左右。

Spark VS HadoopMR
- Spark处理数据时,中间结果通常存储与内存中
- Spark提供了丰富的算子(API 即Spark自带的函数),可以使得复杂的任务在一个Spark程序中完成
2. 易于使用
- Spark是由Scala语言编写的,但是支持Java、Python、R、SQL、Scala等多种语言,有良好的语言适应性,而且且提供大量的API方便编程
3. 通用性强
- 拥有Spark SQL 、 Spark Streaming 、 MLlib 、 GraphX 等多种工具库

Spark通用性
4. 运行方式
- Spark支持多种运行方式,包括在Hadoop,Mesos上,也支持在Standalone上独立运行,同时支持k8s(Kubernetes)上运行

Spark可运行的平台
- 对于数据源而言,Spark主持从HDFS、HBase、Kafka、Cassandra等多种途径获取

Spark支持的数据源