Apache Spark - 简介


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

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

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

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

阿帕奇火花

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 堆栈中。它允许其他组件在堆栈顶部运行。

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

Spark的组成部分

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

Spark的组成部分

Apache Spark 核心

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

星火SQL

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

火花流

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

MLlib(机器学习库)

由于采用基于分布式内存的Spark架构,MLlib是Spark之上的分布式机器学习框架。根据基准测试,这是由 MLlib 开发人员针对交替最小二乘法 (ALS) 实现完成的。Spark MLlib 的速度是基于 Hadoop 磁盘的Apache Mahout版本(在 Mahout 获得 Spark 接口之前)的九倍。

图X

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