Apache Spark
Apache Spark 是用于机器学习和 AI 应用程序的开源数据处理引擎,它具有闪电般的速度,由大数据领域最大的开源社区提供支持
抽象的黑色和蓝色图像
什么是 Apache Spark?

Apache Spark 是用于机器学习和 AI 应用程序的开源数据处理引擎,它具有闪电般的速度,由大数据领域最大的开源社区提供支持。

Apache Spark (Spark) 是一种用于大型数据集的开源数据处理引擎。 它旨在提供大数据所需的计算速度、可扩展性和可编程性,特别适用于流数据、图形数据、机器学习和人工智能 (AI) 应用程序。

Spark 分析引擎处理数据的速度比其他方法快 10 到 100 倍。 它可通过跨大型计算机集群分配处理工作进行扩展,具有内置的并行性和容错能力。 它甚至包括非常受数据分析师和数据研究员欢迎的编程语言(包括 Scala、Java、Python 和 R)的 API。

Spark 通常与 Apache Hadoop 相提并论,特别是与 Hadoop 的本机数据处理组件 MapReduce 功能相当。 Spark 和 MapReduce 之间的主要区别在于,Spark 处理数据并将数据保存在内存中,以供后续步骤使用,而无需读写磁盘,从而显著加快了处理速度。 (您可以在本文的其他地方找到有关 Spark 与 Hadoop 的比较情况及其如何互补的更多信息。)

Spark 于 2009 年诞生于加州大学伯克利分校。 目前,它由 Apache 软件基金会维护,拥有大数据领域最大的开源社区,此社区的贡献者人数超过 1,000 名。 Spark 还是多个商用大数据产品的核心组件。

构建最佳数据湖意味着需要选择合适的对象存储 - 这正是 Apache Spark 的用武之地。

阅读电子书 (909 KB)

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 还会处理另外两种数据类型:数据帧和数据集。

数据帧是最常见的结构化应用程序编程接口 (API),用于表示具有行和列的数据表。 尽管 RDD 一直是 Spark 的一个关键功能,但它目前处于维护方式。 由于 Spark 机器学习库 (MLlib) 十分受欢迎,因此数据帧已成为 MLlib 的主要 API。 使用 MLlib API 时,请务必注意这一点,因为数据帧可以跨不同语言(例如 Scala、Java、Python 和 R)保持一致 。

数据集是数据帧的扩展,它提供了一个类型安全、面向对象的编程接口。 默认情况下,数据集是强类型 JVM 对象的集合,在这一点上,它与数据帧不同。

Spark SQL 允许从数据帧和 SQL 数据存储(例如 Apache Hive)中查询数据。 Spark SQL 查询在另一种语言中运行时,会返回一个数据帧或数据集。

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 在数据处理方式上都存在着细微的差别。 在每种语言 API 中都提供了 RDD、数据帧和数据集 。 借助各种语言的 API,Spark 让更多具有开发、数据科学和统计学背景的群体能够使用大数据处理功能。

 
特色产品

Analytics Engine

Apache Spark 与机器学习

Spark 提供了多个库,这些库可以将不同功能扩展到机器学习、人工智能 (AI) 和流处理领域。

Apache Spark MLlib

 

Apache Spark 的一项关键功能就是 Spark MLlib 中可用的机器学习功能。 Apache Spark MLlib 提供了一个现成的解决方案,具有分类和回归、协同过滤、聚类、分布式线性代数、决策树、随机森林、梯度增强树、频繁模式挖掘、评估指标以及统计功能。 MLlib 的众多功能以及 Spark 可处理的各种数据类型,使 Apache Spark 成为一个不可或缺的大数据工具。

Spark GraphX

 

除了具有 API 功能之外,Spark 还新增了 Spark GraphX,旨在解决图形问题。 GraphX 是一种图形抽象,扩展了用于图形和图形并行计算的 RDD。 Spark GraphX 集成了图形数据库,用于存储互连信息或 Web 连接信息,例如社交网络的信息。

Spark Streaming

 

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

相关链接

Hadoop

大数据分析

Spark 与 Apache Hadoop 和 MapReduce

“Spark 与 Hadoop”是网上常见的搜索项,但如上所述,Spark 更像是对 Hadoop 的增强,更具体地说,Spark 是对 Hadoop 的本机数据处理组件 MapReduce 的增强。 事实上,Spark 建立在 MapReduce 框架之上,目前大多数的 Hadoop 发行版都包含 Spark。

与 Spark 一样,程序员也可以使用 MapReduce 编写应用程序,通过跨大型计算机集群并行处理数据集的不同部分来更快地处理大量数据集。 然而,MapReduce 是在磁盘上处理数据,这就增加了读写时间,从而减慢了处理速度,而 Spark 是在内存中执行计算,所以速度要快得多。 因此,Spark 处理数据的速度可比 MapReduce 快 100 倍。 

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

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

相关解决方案
AIOps

了解 AIOps,这一领域利用分析、人工智能和其他技术来提高 IT 运营的效率和效益。

探索 AIOps
IBM Spectrum Conductor

信心满满地为本地和云端的多租户企业环境部署 IBM Spectrum Conductor 和其他服务。

探索 IBM Spectrum Conductor
IBM Analytics Engine

Analytics Engine 是 Apache Spark 和 Apache Hadoop 组合式服务,用于创建分析应用。

探索 IBM Analytics Engine
采取下一步行动

Spark 是一个强大的工具,可添加到企业数据解决方案中,帮助开展大数据分析。 它还可以与现有的 IBM 大数据解决方案结合使用。
 IBM Spectrum Conductor 是一个多租户平台,可用于在公共的共享资源集群上部署和管理 Apache Spark 的其他应用程序框架。 Spectrum Conductor 提供了工作负载管理、监控、警报、报告和诊断功能,可以同时运行多个最新和不同版本的 Spark 及其他框架。 用户可以通过集成的 Spark 分发版轻松地部署和维护 Apache Spark。


立即探索 IBM Spectrum Conductor