Apache Spark
每当我们研究任何处理数据的工具时,都必须研究它可以处理多少数据,以及该工具为何真正投入使用。
开发Apache Spark的原因很多。
我们将在这里研究它们中的每一个。
除此之外,我们还将学习Apache Spark的组件和体系结构以及它如何对Hadoop框架进行补充。
让我们开始吧。
为什么选择Apache Spark?
Apache Spark作为Hadoop生态系统的一部分获得如此广泛的受欢迎的原因有很多。
让我们研究一下将Apache Spark视为处理数据的出色工具的原因。
数据速度
如今,创建数据的速度令人震惊。
机器,传感器和服务器在我们周围到处产生数据。
描述数据速度的最大示例之一是,当用户使用时,跟踪系统会收集有关用户点击访问其他页面的位置的数据。
约有数千名用户同时使用同一和跟踪系统收集此数据的图像。
但是,除非我们开始存储和处理这些数据,否则这些数据的用途是什么?这种数量巨大且高速流入的数据可以称为大数据。
在进行深入的查询和处理之后,大数据可用于获取结果。
但是由于这些数据是高度非结构化的,因此常规方法不适用于执行此分析。
能够分析这种类型和数据大小的框架称为Hadoop。
Hadoop是处理此类大数据的出色框架,但它有一些局限性,我们将在以后的部分中进行研究(您也可以在此处阅读)。
为了克服这些限制,开发了Apache Spark。
资料处理速度
Hadoop是一种分析数据的绝妙方法,但是它做不到的一件事就是呈现与我们在短时间内收集到的大数据有关的洞察结果。
Hadoop Map R Jobs可能需要很长时间才能执行,并且在这些结果到达涉众时,创建的业务洞察力可能根本不相关。
只有在最短的时间内提供这些结果,这些结果才对业务有用。
这是Apache Spark解决的另一个问题。
什么是Apache Spark?
Apache Spark是一个开源数据处理框架,可以在分布式环境中对大数据执行分析操作。
这是UC Berkley的一个学术项目,最初由Matei Zaharia在UC Berkeley的AMPLab于2009年发起。
Apache Spark是在称为Mesos的集群管理工具之上创建的。
后来对其进行了修改和升级,以便可以在具有分布式处理的基于集群的环境中工作。
Spark是对Hadoop中与大数据处理速度有关的局限性的一种解决方案,这是由于Spark能够保持其在内存中进行的处理的中间结果。
这意味着分析操作的执行时间至少比标准MapReduce作业快100倍。
关于管理内存中数据的最大优势是,当内存中数据开始达到其阈值时,Apache Spark非常聪明地开始将数据写入磁盘。
Spark在其RDD(弹性分布式数据集)上遵循了惰性评估的概念。
这意味着除非绝对必要,否则我们不会对RDD执行任何操作。
这避免了可能消耗内存的任何转换和触发器。
这是我们如何可视化惰性评估:Apache Spark惰性评估
This way, Spark avoids execution of tasks immediately and it maintains a meta-data about the operations it needs to perform in a DAG (Directed Acyclic Graph).
与Apache Spark相关的一些功能包括:
与MapReduce Framework函数相比,Spark支持更多的任务操作
Spark用Scala编程语言编写并在JVM中运行
Scala,Java,Python和R等各种编程语言均支持Spark API,这使得使用Spark制作应用程序变得轻松而灵活
Spark还提供了一个交互式shell程序,用于快速操作和任务执行,但是,到目前为止,该shell程序仅支持Python和Scala。
由于Spark在Hadoop集群上运行的原因,它可以轻松处理JBase Structure中的数据,因此,它就像是当前应用程序环境的扩展
它是机器学习算法中用于迭代任务的出色处理框架
Apache Spark的组件
在开始讨论Apache Spark的组件之前,让我们看一下它们的组件如何组合在一起以形成一个生态系统:Apache Spark生态系统
Apache Spark核心API
Apache Spark Core API包含spark平台的执行引擎,该引擎提供了内存计算和引用完整平台的外部存储系统中存储的数据集的功能。
它还负责任务调度,调度和其他I/O功能。
在我们的程序中,我们可以利用Core API来使用Python,Scala,Java和R编程语言公开功能。
Spark SQL
Spark SQL为用户提供基于SQL的API,以运行SQL查询以对这些基于大数据的数据集执行计算。
这样,即使是业务分析师也可以通过提供简单的SQL查询并深入研究可用数据来运行Spark Jobs。
Spark Streaming
Spark Streaming是一个非常有用的API,它使我们能够从各种数据源中进行高吞吐量,容错的流处理,如下图所示:Apache Spark Streaming
This way, this API makes Spark an excellent tool to process real-time streaming data. The fundamental stream unit in the API is called a DStream.
MLlib(机器学习库)
MLib是少数几种机器学习算法的集合,可用于执行数据清理,分类,回归,特征提取,降维等任务。
其中还包括SGD和BFGS之类的优化原语。
GraphX
GraphX是用于图形相关计算的Spark API。
该API通过引入弹性分布式属性图来改进Spark RDD。
就像Spark Streaming和Spark SQL API一样,GraphX还扩展了Spark RDD API,从而创建了有向图(DAG)。
它还包含许多使用图算法来操作图的运算符。