Spark 简介

Hadoop 框架基于简单的编程模型(MapReduce),并且具有可扩展、灵活、容错且经济的特点,所以使用 Hadoop 分析数据集的计算解决方案在各个行业应用广泛。

在这里,我们主要关注的是在查询之间的等待时间和运行程序的等待时间方面保持处理大型数据集的速度。

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在2009年在UC Berkeley的Matei Zaharia的AMPLab中开发的子项目之一。它是在2010年根据BSD许可开放源代码。它于2013年捐赠给Apache软件基金会,现在Apache Spark已经成为2014年2月以来的顶级Apache项目。

 

Apache Spark的特点

  • Speed - Spark有助于在Hadoop集群中运行应用程序,内存速度提高了100倍,在磁盘上运行速度提高了10倍。 这可以通过减少对磁盘的读/写操作来实现。它将中间处理数据存储在内存中。
  • 支持多种语言 - Spark提供Java,Scala或Python中的内置API。 因此,您可以使用不同的语言编写应用程序。Spark与80位高级操作员进行交互式查询。
  • 高级分析 - Spark不仅支持'Map'和'reduce'。 它还支持SQL查询,流数据,机器学习(ML)和图算法。

 

Spark构建于Hadoop上

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

Spark构建于Hadoop上

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

  • Standalone - Spark Standalone部署意味着Spark占用HDFS(Hadoop分布式文件系统)之上的空间,并明确地为HDFS分配空间。 在这里,Spark和MapReduce将并排运行,以涵盖集群上的所有Spark任务。
  • Hadoop Yarn - Hadoop Yarn部署意味着,只需在Yarn上运行即可,无需任何预安装或root访问权限。 它有助于将Spark集成到Hadoop生态系统或Hadoop堆栈中。它允许其他组件在栈顶运行。
  • MapReduce中的Spark(SIMR) - 除了独立部署外,MapReduce中的Spark还用于启动Spark任务。 使用SIMR,用户可以启动Spark并使用其外壳,而无需任何管理访问。

 

Spark的组件

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

Spark的组件

Apache Spark核心

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的速度是 Apache Mahout 的Hadoop磁盘版本的9倍(Mahout获得Spark界面之前)。

GraphX

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

弹性分布式数据集弹性分布式数据集(RDD)是Spark的基础数据结构。它是一个不可变的分布式对象集合。RDD中的每个数据集都被划分为逻辑分区,这些分区可以在集群的不同节点上进行计算。RDD可以包含任何类型的Python, ...