什么是 Apache Spark?

建筑物屋顶的鸟瞰图

什么是 Apache Spark?

Apache Spark 是一款速度极快的开源数据处理引擎,适用于机器学习和 AI 应用程序,由大数据领域最大的开源社区提供支持。

Apache Spark (Spark) 可轻松处理大规模数据集,是一种快速、通用的聚类系统,非常适合 PySpark。它旨在提供大数据所需的计算速度、可扩展性和可编程性,特别是流数据、图形数据、分析机器学习、大规模数据处理和人工智能 (AI) 应用程序。

Spark 的分析引擎处理数据的速度比一些替代方案快 10 到 100 倍,例如用于较小工作量的 Hadoop。它通过在大型计算机聚类之间分配处理工作流来扩展,并具有内置的并行性和容错能力。它甚至包括深受数据分析师和数据科学家欢迎的编程语言的 API,包括 Scala、Java、Python 和 R。

Spark 经常被拿来与 Apache Hadoop 比较,特别是与 Hadoop 的本地数据处理组件 Hadoop MapReduce 比较。Spark 和 MapReduce 之间的主要区别在于,Spark 处理数据并将其保存在内存中以供后续步骤使用,而无需写入磁盘或从磁盘读取数据,从而大大加快了处理速度。(关于 Spark 与 Hadoop 的比较和互补,您可以在本文其他部分找到更多信息)。

Spark 于 2009 年由加州大学伯克利分校的 AMPLab 开发。如今,它由 Apache 软件基金会维护,拥有最大的大数据开源社区,拥有超过 1000 名贡献者。它也是多种商业大数据产品的核心组件。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

Apache Spark 的工作原理

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 是最常见的结构化应用程序编程接口 (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 使具有开发、数据科学、数据工程和统计背景的更多不同群体可以访问大数据处理。

Think 2025

利用混合云规模化释放 AI 价值

了解精心设计的混合架构如何整合数据、发挥高性能计算优势并提升安全性,为 AI 规模化应用铺就成功之路。

Apache Spark 的优势

Spark 以多种方式加快开发和运营。Spark 将帮助团队:

  • 加速应用程序的开发:Apache Spark 的 Streaming 和 SQL 编程模型由 MLlib 和 GraphX 提供支持,可以更加轻松地构建应用程序,利用机器学习和图形分析。

  • 加快创新速度API 在处理半结构化数据和转换数据时提供易用性。

  • 利用开放技术进行优化OpenPOWER Foundation 支持 GPU、CAPI Flash、RDMA、FPGA 加速和机器学习创新,以优化 Apache Spark 工作量的性能。

  • 加快处理速度:Spark 具有先进的内存计算引擎和磁盘数据存储,因此对于较小的工作量,Spark 的速度比 Hadoop 快 100 倍

  • 加速内存访问:Spark 可用于创建一个大内存空间,以进行数据处理,使更多高级用户能够通过使用 Python、R 和 Spark SQL 的接口访问数据。

Apache Spark 和机器学习

Spark 拥有各种库,可将功能扩展到机器学习、人工智能 (AI) 和流处理。

Apache Spark MLlib

Apache Spark 的其中一个关键功能是 Spark MLlib 中提供的机器学习功能,它为执行分类和回归、协同过滤、聚类、分布式线性代数、决策树、随机森林、梯度提升树、频繁模式挖掘、评估指标和统计提供开箱即用的解决方案。MLlib 的功能与各种数据类型相结合,使 Apache Spark 成为不可或缺的大数据工具。

Spark GraphX

除了具有 API 功能外,Spark GraphX 还专为解决图形问题而设计。GraphX 是一种图形抽象,它对用于图形和图形并行计算的 RDD 进行扩展。Spark GraphX 与存储互连信息或连接信息网络(如社交网络)的图形数据库集成。

Spark Streaming

Spark Streaming 是核心 Spark API 的扩展,支持对实时数据流进行可扩展的容错处理。当 Spark Streaming 处理数据时,它可以将数据传送到文件系统、数据库和实时仪表板,以便使用 Spark 的机器学习和图形处理算法进行实时流式分析。Spark Streaming 基于 Spark SQL 引擎构建,还支持增量批处理,从而更快地处理流数据。

Spark 与 Apache Hadoop 和 MapReduce 对比

“Spark 与 Hadoop 对比”是网络上经常搜索的一个术语,但如上所述,Spark 更多的是对 Hadoop 的增强,更具体地说,是对 Hadoop 的本机数据处理组件 MapReduce 的增强。实际上,Spark 建立在 MapReduce 框架之上,如今,大多数 Hadoop 发行版都包含 Spark

与 Spark 一样,借助 MapReduce,程序员能够编写应用程序,通过在大型计算机集群中并行处理数据集的一部分来更快地处理大型数据集。但是,MapReduce 在磁盘上处理数据,会增加读写时间,减慢处理速度,而 Spark 在内存中执行计算,速度要快得多。因此,Spark 处理数据的速度比 MapReduce 快 100 倍。

对于开发人员来说,Spark 内置的多种 API 比因难以编程而闻名的 MapReduce 更实用、更容易上手。与 MapReduce 不同,Spark 可以使用 Hadoop 的资源管理和作业调度框架 YARN 在 Hadoop 聚类上运行流处理应用程序。如上所述,Spark 增加了 MLlib、GraphX 和 SparkSQL 的功能。而且,Spark 可以处理来自 Hadoop 应用程序之外的其他数据源的数据,包括 Apache Kafka

在其他方面,Spark 与 Hadoop 兼容且互补。它可以处理 Hadoop 数据,包括来自 HDFS(Hadoop 分布式文件系统)、HBase(在 HDFS 上运行的非关系型数据库)、Apache Cassandra(HDFS 的 NoSQL 替代方案)和 Hive(基于 Hadoop 的数据仓库)的数据。

相关解决方案
IBM Z Operational Log and Data Analytics 

通过近乎实时的运营分析加速混合事件识别。

探索 IBM Z
云分析解决方案

通过云分析解决方案,您可以轻松分析数据并建立机器学习模型,从而获得改变业务的成果。

深入了解云分析解决方案
云咨询服务

利用 IBM 的云咨询服务探索新功能并推动业务敏捷性。

深入了解我们的云咨询服务
采取后续步骤

通过连接大型机和云的强大分析功能,从 IBM Z 数据中解锁实时洞察分析,以便您可以更快地采取行动、降低风险并做出更明智的决策。

探索 IBM Z 获取更多信息