Apache Spark是一个用于实时处理的开源集群计算框架。它是Apache Software Foundation中最成功的项目。显然,Spark已经发展成为大数据处理的市场领导者。如今,Spark已被亚马逊,eBay和Yahoo!等主要公司采用。许多组织在具有数千个节点的群集上运行Spark,这在您的职业生涯中是成为Spark认证专业人员的巨大机会。 我们很高兴通过这个Spark教程 博客开始这一激动人心的旅程。该博客是即将推出的Apache Spark博客系列中的第一个博客,其中包括Spark Streaming,Spark Interview Questions,Spark MLlib等。
对于实时数据分析,Spark是所有其他解决方案的必备工具。通过此博客,我将向您介绍Apache Spark的这一令人兴奋的新领域,并且我们将介绍完整的用例,即 使用Spark进行地震检测。
以下是此Spark教程博客中涉及的主题:
- 实时分析
- 为什么在Hadoop已经存在的情况下使用Spark?
- 什么是Apache Spark?
- Spark功能
- Spark入门
- 在Spark中使用Hadoop
- 火花组件
- 用例:使用Spark进行地震检测
Spark教程:实时分析
在开始之前,让我们看一下社交媒体领导者每分钟生成的数据量。
图: 每分钟生成的数据量
我们可以看到,互联网世界需要在几秒钟内处理大量数据。我们将经历处理企业中大数据的所有阶段,并发现需要 一种称为Apache Spark的实时处理框架。
首先,让我向您介绍当今世界上大量使用实时分析的领域。
图: Spark教程– 实时分析示例
我们可以看到,大数据的实时处理已根植于我们生活的方方面面。从银行中的欺诈检测到政府中的实时监控系统,再到医疗保健中的自动化机器再到股票市场中的实时预测系统,我们周围的一切都围绕着实时处理大数据而展开。
让我们看一下实时分析的一些用例:
- 医疗保健:医疗保健领域使用实时分析来连续检查关键患者的医疗状况。急需血液和器官移植的医院在紧急情况下需要保持实时联系。准时接受医疗护理是患者生死攸关的问题。
- 政府:政府机构主要在国家安全领域执行实时分析。各国需要不断跟踪所有军事和警察机构,以获取有关安全威胁的最新信息。
- 电信:围绕呼叫,视频聊天和流媒体等形式的服务的公司使用实时分析来减少客户流失并保持竞争优势。他们还提取移动网络中抖动和延迟的度量,以改善客户体验。
- 银行业务:银行业务几乎可以用世界上所有的货币进行交易。确保整个系统中的容错事务非常重要。通过银行中的实时分析,可以进行欺诈检测。
- 股票市场:股票经纪人使用实时分析来预测股票投资组合的变动。公司在使用实时分析来分析其品牌的市场需求之后,重新考虑其业务模型。
Spark教程:当Hadoop已经存在时为什么要使用Spark?
每个人都问起Spark时要问的第一个问题是:“ 当我们已经有了Hadoop时为什么要使用Spark?”。
为了回答这个问题,我们必须看一下批处理和实时处理的概念。Hadoop基于批处理的概念,其中处理发生在一段时间内已经存储的数据块。当时,Hadoop在2005年通过革命性的MapReduce框架打破了所有期望。HadoopMapReduce是批量处理数据的最佳框架。
一直持续到2014年,直到Spark取代Hadoop。用于Spark的USP可以实时处理数据,并且在批处理大数据集方面比Hadoop MapReduce快约100倍。
下图详细说明了Spark和Hadoop中的处理之间的区别。
图:Spark教程– Hadoop与Spark之间的区别
在这里,我们可以得出Hadoop与Spark之间的主要区别之一。Hadoop基于大数据的批处理。这意味着数据将存储一段时间,然后使用Hadoop进行处理。 而在Spark中,处理可以实时进行。Spark中的这种实时处理能力有助于我们解决上一节中看到的Real Time Analytics的用例。除此之外,Spark还能够执行比Hadoop MapReduce(Apache Hadoop中的处理框架)快100倍的批处理。因此,Apache Spark是行业中大数据处理的首选工具。
Spark教程:什么是Apache Spark?
Apache Spark是一个用于实时处理的开源集群计算框架。 它具有蓬勃发展的开源社区,并且是当前最活跃的Apache项目。Spark提供了一个接口,用于使用隐式数据并行性和容错性对整个集群进行编程。
图: Spark教程– Apache Spark中的实时处理
它建立在Hadoop MapReduce和 它扩展了MapReduce模型,以有效地使用更多类型的计算。
Spark教程:Apache Spark的功能
Spark具有以下功能:
图: Spark教程– Spark功能
让我们详细看一下这些功能:
多种语言: Spark提供Java,Scala,Python和R的高级API。Spark代码可以用这四种语言中的任何一种编写。它在Scala和Python中提供了一个shell。可以通过./bin/spark-shell访问Scala shell ,通过./bin/pyspark从安装目录访问Python shell 。 |
|
速度: 对于大规模数据处理,Spark的运行速度比Hadoop MapReduce快100倍。Spark可以通过受控分区来达到这种速度。它使用分区管理数据,这些分区有助于以最小的网络流量并行化分布式数据处理。 |
多种格式: 除了文本文件,CSV和RDBMS表等常用格式外,Spark还支持Parquet,JSON,Hive和Cassandra等多种数据源。数据源API提供了一种可插入的机制,用于通过Spark SQL访问结构化数据。数据源不仅可以是转换数据并将其拉入Spark的简单管道。 |
惰性评估: Apache Spark将评估推迟到绝对必要为止。这是影响其速度的关键因素之一。对于转换,Spark将它们添加到计算的DAG(有向无环图)中,只有在驱动程序请求一些数据时,此DAG才会真正执行。 |
实时计算: Spark的计算是实时的,并且由于其内存中的计算而具有低延迟。Spark专为实现大规模可扩展性而设计,Spark团队已记录了运行具有数千个节点的生产集群的系统用户,并支持多种计算模型。 |
Hadoop集成: Apache Spark提供与Hadoop的平滑兼容性。 对于所有开始使用Hadoop的大数据工程师来说,这都是福音。Spark可以替代Hadoop的MapReduce功能,而Spark可以在使用YARN进行资源调度的现有Hadoop群集之上运行。 |
机器学习: Spark的MLlib是机器学习组件,在涉及大数据处理时非常方便。它消除了使用多种工具的需要,一种用于处理,另一种用于机器学习。Spark为数据工程师和数据科学家提供了功能强大的统一引擎,该引擎既快速又易于使用。 |
开始使用Spark的第一步是安装。让我们在Linux系统上安装Apache Spark 2.1.0(我正在使用Ubuntu)。
安装:
- 安装Spark的前提条件是必须安装Java和Scala。
- 如果 未使用以下命令安装Java,请下载它。
1个234
sudo apt-get install python-software-properties
sudo apt-add-repository ppa
:
webupd
8
team/java
sudo apt-get update
sudo apt-get install oracle-java
8
-installer
- 从Scala Lang官方 页面下载最新的Scala版本。 安装完成后,如下所示在文件中设置scala路径
~/.bashrc
。1个2export SCALA
_
HOME
=
Path
_
Where
_
Scala
_
File
_
Is
_
Located
export PATH
=
$SCALA
_
HOME/bin
:
PATH
- 从Apache Spark下载页面下载Spark 2.1.0 。您也可以选择下载以前的版本。
- 使用以下命令提取Spark tar。
1个
tar -xvf spark-
2.1
.
0
-bin-hadoop
2.7
.tgz
- 在
~/.bashrc
文件中设置Spark_Path 。1个2export SPARK
_
HOME
=
Path
_
Where
_
Spark
_
Is
_
Installed
export PATH
=
$PATH
:
$SPARK
_
HOME/bin
在继续之前,让我们在系统上启动Apache Spark,并熟悉Spark的主要概念,例如Spark Session,数据源,RDD,DataFrames和其他库。
Spark Shell:
Spark的外壳提供了学习API的简单方法,以及强大的工具来交互式地分析数据。
火花会议:
在早期版本的Spark中,Spark Context是Spark的入口点。对于其他所有API,我们需要使用不同的上下文。对于流,我们需要StreamingContext,SQL sqlContext和配置单元HiveContext。为了解决这个问题,SparkSession出现了。它 本质上是SQLContext,HiveContext和将来的StreamingContext的组合。
数据源:
数据源API提供了一种可插入的机制,用于通过Spark SQL访问结构化数据。数据源API用于读取结构化和半结构化数据并将其存储到Spark SQL中。数据源不仅可以是转换数据并将其拉入Spark的简单管道。
RDD:
弹性分布式数据集(RDD)是Spark的基本数据结构。它是对象的不可变分布式集合。RDD中的每个数据集都分为逻辑分区,可以在群集的不同节点上进行计算。RDD可以包含任何类型的Python,Java或Scala对象,包括用户定义的类。
资料集:
数据集是数据的分布式集合。可以从JVM对象构造数据集,然后使用功能转换(地图,flatMap,过滤器等)进行操作。Dataset API在Scala和Java中可用。
数据框:
DataFrame是组织为命名列的数据集。从概念上讲,它等效于关系数据库中的表或R / Python中的数据框,但是在后台进行了更丰富的优化。DataFrames可以从多种来源构造,例如:结构化数据文件,Hive中的表,外部数据库或现有的RDD。
Spark教程:将Spark与Hadoop结合使用
Spark最好的部分是它与Hadoop的兼容性。结果,这实现了非常强大的技术组合。在这里,我们将研究Spark如何从Hadoop的最佳优势中受益。
图:Spark教程– Spark功能
Hadoop组件可通过以下方式与Spark一起使用:
- HDFS: Spark可以在HDFS之上运行以利用分布式复制存储。
- MapReduce: Spark可以与MapReduce一起在同一Hadoop群集中使用,也可以作为处理框架单独使用。
- YARN:可以使Spark应用程序在YARN(Hadoop NextGen)上运行。
- 批处理和实时处理: MapReduce和Spark一起使用,其中MapReduce用于批处理,Spark用于实时处理。
Spark教程:Spark组件
Spark组件使Apache Spark快速可靠。这些Spark组件中的许多组件都是为解决使用Hadoop MapReduce时出现的问题而构建的。Apache Spark具有以下组件:
- 火花芯
- 火花流
- Spark SQL
- GraphX
- MLlib(机器学习)
火花芯
Spark Core是大规模并行和分布式数据处理的基本引擎。核心是分布式执行引擎,而Java,Scala和Python API为分布式ETL应用程序开发提供了平台。此外,在核心之上构建的其他库允许进行流,SQL和机器学习的各种工作负载。 它负责:
- 内存管理和故障恢复
- 在集群上调度,分配和监视作业
- 与存储系统交互
火花流
Spark Streaming是Spark的组件,用于处理实时流数据。因此,它是核心Spark API的有用补充。它支持实时数据流的高吞吐量和容错流处理。基本流单位是DStream,它基本上是一系列RDD(弹性分布式数据集),用于处理实时数据。
图: Spark教程– Spark流
Spark SQL
Spark SQL 是Spark中的新模块,该模块将关系处理与Spark的功能编程API集成在一起。它支持通过SQL或Hive查询语言查询数据。对于熟悉RDBMS的人来说,Spark SQL将是您早期工具的轻松过渡,您可以在其中扩展传统关系数据处理的范围。
Spark SQL将关系处理与Spark的功能编程集成在一起。此外,它提供了对各种数据源的支持,并可以通过代码转换来编织SQL查询,从而产生了非常强大的工具。
以下是Spark SQL的四个库。
- 资料来源API
- DataFrame API
- 解释器和优化器
- SQL服务
可以在给定的博客中找到有关Spark SQL的完整教程:Spark SQL教程博客
GraphX
GraphX是用于图形和图形并行计算的Spark API。因此,它使用弹性分布式属性图扩展了Spark RDD。
属性图是有向多重图,可以有多个平行的边。每个边和顶点都有与之关联的用户定义的属性。在这里,平行边允许相同顶点之间具有多个关系。在较高的层次上,GraphX通过引入弹性分布式属性图(Resilient Distributed Property Graph)来扩展Spark RDD抽象:一个有向多重图,每个顶点和边都具有属性。
为了支持图形计算,GraphX公开了一组基本运算符(例如,子图,joinVertices和mapReduceTriplets)以及Pregel API的优化变体。此外,GraphX包括越来越多的图形算法和构建器集合,以简化图形分析任务。
MlLib(机器学习)
MLlib代表机器学习库。Spark MLlib用于在Apache Spark中执行机器学习。
用例:使用Spark进行地震检测
现在,我们已经了解了Spark的核心概念,让我们使用Apache Spark解决一个现实问题。这将使我们有信心将来从事任何Spark项目。
问题陈述: 设计一个实时地震检测模型来发送救生警报,这应该改善其机器学习能力,以提供接近实时的计算结果。
用例–要求:
- 实时处理数据
- 处理来自多个来源的输入
- 易于使用的系统
- 批量发送警报
我们将使用Apache Spark,它是满足我们需求的完美工具。
用例–数据集:
图: 用例–地震数据集
在继续前进之前,我们必须了解一个概念,即将在地震检测系统中使用它,它被称为接收器工作特性(ROC)。ROC曲线是一种图形图,它说明了二元分类器系统的判别阈值变化时的性能。我们将使用数据集通过Apache Spark中的Machine Learning获取ROC值。
用例–流程图:
下图清楚地说明了地震检测系统中涉及的所有步骤。
图: 用例–使用Apache Spark进行地震检测的流程图
用例– Spark实施:
继续前进,现在让我们使用Eclipse IDE for Spark来实现我们的项目。
在下面找到伪代码:
1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18岁
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
//Importing the necessary classes
import org.apache.spark. _
...
//Creating an Object earthquake
object earthquake {
def main(args : Array[String]) {
//Creating a Spark Configuration and Spark Context
val sparkConf = new SparkConf().setAppName( "earthquake" ).setMaster( "local[2]" )
val sc = new SparkContext(sparkConf)
//Loading the Earthquake ROC Dataset file as a LibSVM file
val data = MLUtils.loadLibSVMFile(sc, *Path to the Earthquake File* )
//Training the data for Machine Learning
val splits = data.randomSplit( *Splitting 60 % to 40 % * , seed = 11 L)
val training = splits( 0 ).cache()
val test = splits( 1 )
//Creating a model of the trained data
val numIterations = 100
val model = *Creating SVM Model with SGD* ( *Training Data* , *Number of Iterations* )
//Using map transformation of model RDD
val scoreAndLabels = *Map the model to predict features*
//Using Binary Classification Metrics on scoreAndLabels
val metrics = * Use Binary Classification Metrics on scoreAndLabels *(scoreAndLabels)
val auROC = metrics. *Get the area under the ROC Curve*()
//Displaying the area under Receiver Operating Characteristic
println( "Area under ROC = " + auROC)
}
}
|
从我们的Spark程序中,我们获得的ROC值为0.088137。我们将转换此值以获得ROC曲线下的面积。
用例–可视化结果:
我们将绘制ROC曲线,并将其与特定地震点进行比较。如果地震点超过ROC曲线,则将这些点视为大地震。根据我们计算ROC曲线下面积的算法,我们可以假定这些大地震在里氏震级上都超过6.0级。
图: 地震ROC曲线
上图显示橙色的地震线。蓝色区域是我们从Spark程序获得的ROC曲线。让我们放大曲线以获得更好的图片。
图: 可视化地震点
我们已将地震曲线与ROC曲线作了图。在橙色曲线高于蓝色区域的点上,我们预测地震将是严重的,即震级大于6.0。因此,有了这些知识,我们可以使用Spark SQL并查询现有的Hive表以检索电子邮件地址并向人们发送个性化的警告电子邮件。因此,我们再次使用技术来拯救人类的麻烦,并使每个人的生活变得更好。
现在,Apache Spark博客到此结束。我希望您喜欢阅读它并发现它有启发性。到目前为止,您必须已经对Apache Spark是什么有了充分的了解。实际操作示例将带给您所需的信心,以从事您在Apache Spark中遇到的任何未来项目。实践是掌握任何学科的关键,我希望该博客对您产生足够的兴趣,以便您进一步探索有关Apache Spark的学习。
有问题要问我们吗?请在评论部分中提及它,我们会尽快与您联系。
如果您想学习Spark并在Spark领域从事职业以使用RDD,Spark Streaming,SparkSQL,MLlib,GraphX和Scala结合Real Life用例执行大规模数据处理,请查看我们的交互式在线实时 Apache这里的 Spark认证培训提供24 * 7的支持,以指导您整个学习期间。