Spark - 简介

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

Spark 由 Apache 软件基金会推出,用于加速 Hadoop 计算软件流程。

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

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

Apache Spark

Apache Spark 是一种闪电般快速的集群计算技术,专为快速计算而设计。它基于 Hadoop MapReduce,并扩展了 MapReduce 模型以有效地将其用于更多类型的计算,包括交互式查询和流处理。Spark 的主要特性是其内存集群计算,可提高应用程序的处理速度。

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

Apache Spark 的演变

Spark 是 Hadoop 的子项目之一,由 Matei Zaharia 于 2009 年在加州大学伯克利分校的 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) 和图形算法。

基于 Hadoop 构建的 Spark

下图显示了使用 Hadoop 组件构建 Spark 的三种方式。

基于 Hadoop 构建的 Spark

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 的不同组件。

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 对用户定义的图形进行建模。它还为这种抽象提供了优化的运行时。