Apache Spark
cloud leadspace
什么是 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 如何与 Hadoop 互补的更多信息。)

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

构建最佳数据湖意味着需要选择合适的对象存储 - Apache Spark 可以在这方面为您提供极大的帮助。

阅读电子书 (15.6 MB)


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。Spark GraphX 是 Spark 的新成员,旨在解决图形问题。 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 的数据仓库) 的数据。


Apache Spark 与 IBM Cloud

Spark 是一个强大的工具,可添加到企业数据解决方案中,因此有助于大 数据分析或 AIOps。 它还可以与现有的 IBM 大数据解决方案结合使用。

IBM Spectrum Conductor 是一个多租户平台,可用于部署和管理公共共享资源集群上的 Apache Spark 其他应用程序框架。 Spectrum Conductor 提供了工作负载管理、监控、警报、报告和诊断功能,可以同时运行多个最新和不同版本的 Spark 及其他框架。 用户可以轻松地部署和维护具有集成式 Spark 分布的 Apache Spark。

可以将 IBM Watson 添加到产品组合中,以支持构建 AI、机器学习和深度学习环境。 IBM Watson 提供了端到端的工作流程、服务和支持,确保数据研究员可以专注于调整和训练 Spark 应用程序的 AI 功能。

IBM Analytics Engine 允许您使用 Apache Spark 和 Hadoop 构建单一的高级分析解决方案。 IBM Analytics Engine 允许用户将数据存储在对象存储层(例如 IBM Cloud Object Storage)中,仅在需要时提供计算节点集群,以帮助实现大数据分析平台的灵活性、可扩展性和可维护性。

首先,注册一个 IBMid 并创建 IBM Cloud 帐户


相关解决方案

AIOps

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


IBM Spectrum Conductor

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


多租户软件架构

了解有关多租户软件架构(使多个用户能够共享软件应用程序的单个实例及其资源)的更多信息。


AI for Business

IBM 的业务就绪工具、应用和解决方案组合,旨在减少 AI 采用的成本和障碍,同时优化成果并负责任地使用 AI。


IBM Analytics Engine

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


云对象存储

用于存储非结构化数据的灵活、经济有效且可扩展的云存储。