Apache Spark 简介



许多行业广泛使用 Hadoop 来分析其数据集。原因在于 Hadoop 框架基于简单的编程模型(MapReduce),它能够提供可扩展、灵活、容错且经济高效的计算解决方案。这里,主要关注的是在处理大型数据集时保持速度,包括查询之间的等待时间和程序运行的等待时间。

Apache 软件基金会推出了 Spark,以加快 Hadoop 计算软件的处理速度。

与普遍的看法相反,Spark 不是 Hadoop 的修改版本,实际上也不依赖于 Hadoop,因为它有自己的集群管理。Hadoop 只是实现 Spark 的一种方式。

Spark 以两种方式使用 Hadoop——一种是存储,另一种是处理。由于 Spark 拥有自己的集群管理计算,因此它仅将 Hadoop 用于存储目的。

Apache Spark

Apache Spark 是一种闪电般快速的集群计算技术,旨在进行快速计算。它基于 Hadoop MapReduce,并扩展了 MapReduce 模型,使其能够高效地用于更多类型的计算,包括交互式查询和流处理。Spark 的主要特点是其内存集群计算,这提高了应用程序的处理速度。

Spark 旨在涵盖各种工作负载,例如批处理应用程序、迭代算法、交互式查询和流处理。除了在各个系统中支持所有这些工作负载外,它还减少了维护单独工具的管理负担。

Apache Spark 的发展历程

Spark 是 Hadoop 的一个子项目,于 2009 年由 Matei Zaharia 在加州大学伯克利分校的 AMPLab 开发。它于 2010 年在 BSD 许可证下开源。它于 2013 年捐赠给 Apache 软件基金会,现在 Apache Spark 已成为从 2014 年 2 月开始的顶级 Apache 项目。

Apache Spark 的特性

Apache Spark 具有以下特性。

  • 速度 - Spark 有助于在 Hadoop 集群中运行应用程序,在内存中速度提高可达 100 倍,在磁盘上运行时速度提高 10 倍。这是通过减少对磁盘的读/写操作来实现的。它将中间处理数据存储在内存中。

  • 支持多种语言 - Spark 提供了 Java、Scala 或 Python 的内置 API。因此,您可以使用不同的语言编写应用程序。Spark 提供了 80 多个高级运算符用于交互式查询。

  • 高级分析 - Spark 不仅支持“Map”和“reduce”,还支持 SQL 查询、流数据、机器学习 (ML) 和图算法。

Spark 基于 Hadoop

下图显示了 Spark 如何与 Hadoop 组件结合使用的三种方式。

Spark Built on Hadoop

如下所述,Spark 有三种部署方式。

  • 独立模式 - Spark 独立模式部署意味着 Spark 位于 HDFS(Hadoop 分布式文件系统)之上,并为 HDFS 显式分配空间。在这里,Spark 和 MapReduce 将并排运行以覆盖集群上的所有 Spark 作业。

  • Hadoop Yarn - Hadoop Yarn 部署意味着 Spark 运行在 Yarn 上,无需任何预安装或 root 访问权限。它有助于将 Spark 集成到 Hadoop 生态系统或 Hadoop 堆栈中。它允许其他组件在堆栈顶部运行。

  • MapReduce 中的 Spark (SIMR) - MapReduce 中的 Spark 用于除了独立模式部署之外启动 Spark 作业。使用 SIMR,用户可以启动 Spark 并使用其 shell,而无需任何管理权限。

Spark 的组件

下图描述了 Spark 的不同组件。

Components of Spark

Apache Spark Core

Spark Core 是 Spark 平台的基础通用执行引擎,所有其他功能都是在此基础上构建的。它提供内存计算和引用外部存储系统中的数据集。

Spark SQL

Spark SQL 是 Spark Core 之上的一个组件,它引入了一种新的数据抽象,称为 SchemaRDD,它支持结构化和半结构化数据。

Spark Streaming

Spark Streaming 利用 Spark Core 的快速调度功能来执行流分析。它以小批量方式提取数据,并在这些数据小批量上执行 RDD(弹性分布式数据集)转换。

MLlib(机器学习库)

MLlib 是 Spark 之上的一个分布式机器学习框架,因为它基于分布式内存的 Spark 架构。据基准测试(由 MLlib 开发人员针对交替最小二乘法 (ALS) 实现进行),Spark MLlib 比 Hadoop 基于磁盘的Apache Mahout版本快九倍(在 Mahout 获得 Spark 接口之前)。

GraphX

GraphX 是 Spark 之上的一个分布式图处理框架。它提供了一个 API 用于表达图计算,可以使用 Pregel 抽象 API 对用户定义的图进行建模。它还为此抽象提供了一个优化的运行时。

广告