Apache Spark (Spark) 可轻松处理大规模数据集,是一种快速、通用的聚类系统,非常适合 PySpark。它旨在提供大数据所需的计算速度、可扩展性和可编程性,特别是流数据、图形数据、
分析
、
机器学习
、大规模数据处理和
人工智能 (AI)
应用程序。
Spark 的分析引擎处理数据的
速度比一些替代方案快 10 到 100 倍,例如用于较小工作负载的 Hadoop
(ibm.com 外部链接)。它通过在大型计算机集群之间分配处理工作流来扩展,并具有内置的并行性和容错能力。它甚至包括深受数据分析师和数据科学家欢迎的编程语言的 API,包括 Scala、
Java
、Python 和 R。
Spark 经常被拿来与
Apache Hadoop
比较,特别是与 Hadoop 的本地数据处理组件 Hadoop
MapReduce
比较。Spark 和 MapReduce 之间的主要区别在于,Spark 处理数据并将其保存在内存中以供后续步骤使用,而无需写入磁盘或从磁盘读取数据,从而大大加快了处理速度。(关于 Spark 与 Hadoop 的比较和互补,您可以在本文其他部分找到更多信息)。
Spark 于 2009 年由加州大学伯克利分校的 AMPLab 开发。如今,它由 Apache 软件基金会维护,拥有最大的大数据开源社区,拥有超过 1000 名贡献者。它也是多种商业大数据产品的核心组件。
Apache Spark 具有分层的主/辅助体系结构。
Spark Driver
是控制集群管理器的主节点,集群管理器负责管理从节点并向应用程序客户端交付数据结果。
根据应用程序代码,Spark Driver 生成
SparkContext
,后者与集群管理器(Spark 的独立集群管理器或 Hadoop YARN、
Kubernetes
或 Mesos 等其他集群管理器)配合使用,以跨节点分发和监控执行。它还创建弹性分布式数据集 (RDD),这是 Spark 具有卓越处理速度的关键。
弹性分布式数据集 (RDD)
弹性分布式数据集 (RDD) 是可容错的元素集合,可分布在集群中的多个节点上,并且可以并行处理。RDD 是 Apache Spark 中的基本结构。
Spark 通过以下两种方法加载数据:引用数据源,或使用 SparkContext 并行化方法将现有集合并行化,将数据缓存到 RDD 中进行处理。将数据加载到 RDD 后,Spark 会在内存中对 RDD 执行转换和操作,这是 Spark 速度的关键。Spark 还会将数据存储在内存中,除非系统内存不足或用户决定将数据写入磁盘进行持久保存。
RDD 中的每个数据集都划分为若干逻辑分区,这些分区可以在集群的不同节点上计算。用户可以执行两种类型的 RDD 操作
:
转换和操作
。
转换是用于创建新 RDD 的操作
。
操作用于指示 Apache Spark 应用计算并将结果传递回驱动程序。
Spark 支持 RDD 上的各种操作和转换。这种分发由 Spark 完成,因此用户不必担心计算正确的分布。
有向无环图 (DAG)
与 MapReduce 中的两阶段执行流程相反,Spark 创建有向无环图 (DAG) 来调度任务和整个集群中工作节点的编排。当 Spark 在任务执行流程中操作并转换数据时,DAG 调度程序通过协调集群中的工作节点来提高效率。这种任务跟踪使容错成为可能,因为它将记录的操作重新应用于以前状态的数据。
数据框和数据集
除了 RDD,Spark 还能处理其他两种数据类型:DataFrame 和 DataSet。
DataFrame 是最常见的结构化应用程序编程接口 (API),表示包含行和列的数据表。尽管 RDD 一直是 Spark 的关键功能,但它现在处于维护模式。由于 Spark 的机器学习库 (MLlib) 广受欢迎,DataFrame 已成为 MLlib 的主要 API(一套可扩展的机器学习算法以及用于功能选择和构建 ML 管道的工具)。使用 MLlib API 时,请务必注意这一点,因为 DataFrame 提供跨不同语言(如 Scala、Java、Python 和 R)的一致性。
DataSet 是 DataFrame 的扩展,它提供类型安全、面向对象的编程接口。默认情况下,DataSet 是强类型 JVM 对象的集合,这与 DataFrame 不同。
Spark SQL 支持从 DataFrame 和 SQL 数据存储(例如 Apache Hive)中查询数据。Spark SQL 查询在以另一种语言运行时会返回 DataFrame 或 DataSet。
Spark Core
Spark Core 是所有并行数据处理的基础,负责处理调度、优化、RDD 和数据抽象。Spark Core 为 Spark 库、Spark SQL、Spark Streaming、MLlib 机器学习库和 GraphX 图形数据处理提供功能基础。Spark Core 和集群管理器在 Spark 集群中分发数据并将其抽象化。这种分发和抽象使得处理大数据变得非常快速且用户友好。
Spark API
Spark 包含各种
应用程序编程接口 (API)
,旨在将 Spark 的强大功能带给最广泛的受众。Spark SQL 支持以关系方式与 RDD 数据进行交互。Spark 还为 Scala、Java、Python 和 R 提供有据可查的 API。Spark 中的每种语言 API 在处理数据的方式上都有其特定的细微差别。RDD、DataFrame 和 DataSet 在每种语言 API 中均可用。借助适用于各种语言的 API,Spark 使具有开发、数据科学、数据工程和统计背景的更多不同群体可以访问
大数据
处理。
Spark 以多种方式加快开发和运营。Spark 将帮助团队: