Apache Spark是一个用于实时处理的开源集群计算框架。它是Apache软件基金会中最成功的项目之一。Spark显然已经发展成为大数据处理的市场领导者。如今,Spark正被亚马逊、易趣和雅虎等主要公司采用!
说到实时数据分析,Spark是所有其他解决方案的通用工具。通过这个博客,我将向您介绍ApacheSpark这个令人兴奋的新领域,我们将通过一个完整的用例,使用Spark进行地震探测。
本文将分为以下几个主题:
1、实时数据分析
2、在已经有hadoop的情况下为何还要使用spark?
3、 什么是Apache Spark?
4、 Spark 特性
5、 Spark入门
6、在Hadoop中使用 Spark
7、 Spark组件介绍
9、例子:使用Spark进行地震探测
Spark教程:实时数据分析
在开始之前,让我们来看看各大互联网社交媒体每分钟产生的数据量。
正如我们所看到的,互联网世界需要在几秒钟内处理大量的数据。我们在经历企业处理大数据的所有阶段后,发现需要一个名为Apache Spark的实时处理框架。
互联网之外,让我向您介绍一些在当今世界使用实时分析的专业领域。
我们可以看到,大数据的实时处理在我们生活的方方面面都根深蒂固。从银行业的欺诈检测到政府的实时监控系统,从医疗保健的自动化机器到股市的实时预测系统,我们周围的一切都围绕着近实时处理大数据展开。
让我们看看实时分析的一些用例:
1、医疗:医疗领域使用实时分析来持续检查危重病人的医疗状况。医院在关注血液和器官移植时,需要在紧急情况下保持实时联系。按时就医是病人生死攸关的大事。
2、政府:政府机构主要在国家安全领域进行实时分析。各国需要不断跟踪所有军事和警察机构,了解有关安全威胁的最新情况。
3、电信:以电话、视频聊天和流媒体等形式提供服务的公司使用实时分析来减少客户流失并保持领先地位。他们还提取移动网络中抖动和延迟的测量值,以改善客户体验。
4、银行业:银行业几乎用世界上所有的钱进行交易。确保整个系统的容错事务变得非常重要。通过银行业的实时分析,欺诈检测成为可能。
5、股票市场:股票经纪人使用实时分析来预测股票投资组合的变动。企业在使用实时分析来分析其品牌的市场需求后,会重新思考其商业模式。
Spark教程:为什么在Hadoop已经存在的情况下还要使用Spark?
当谈到Spark时,每个人都会问的第一个问题是,“既然我们已经有了Hadoop,为什么还要Spark?“
要回答这个问题,我们必须研究批处理和实时处理的概念。Hadoop基于批处理的概念,批处理是指处理已经存储了一段时间的数据块。Hadoop在2005年实现了MapReduce框架的所有期望。Hadoop MapReduce是批量处理数据的最佳框架。
这一直持续到2014年,直到Spark超过了Hadoop。Spark的优势在于它能够实时处理数据,并且在批量处理大型数据集时比Hadoop MapReduce快大约100倍。
下图详细解释了Spark和Hadoop中处理的区别。
在这里,我们可以找出Hadoop和Spark之间的关键区别之一。Hadoop基于大数据的批处理。这意味着数据将存储一段时间,然后使用Hadoop进行处理。而在Spark中,处理可以实时进行。Spark中的这种实时处理能力有助于我们解决上一节中看到的实时分析用例。除此之外,Spark还能够以比Hadoop MapReduce(Apache Hadoop中的处理框架)快100倍的速度进行批处理。因此,Apache Spark是业界进行大数据处理的首选工具。
Spark教程:什么是ApacheSpark?
Apache Spark是一个用于实时处理的开源集群计算框架,它拥有一个蓬勃发展的开源社区,是目前最活跃的Apache项目。Spark提供了一个对整个隐式数据并行性和容错性集群进行编程的接口。
它是建立在Hadoop MapReduce之上的,它扩展了MapReduce模型以有效地使用更多类型的计算。
Spark教程:ApacheSpark的特性
Spark具有以下特点:
多语言支持:Spark用Java、Scala、Python和R提供高级api,Spark代码可以用这四种语言中的任何一种编写。它在Scala和Python中提供了一个shell。Scala shell可以通过已安装目录中的./bin/spark shell和Python shell通过./bin/pyspark访问
速度:对于大规模数据处理,Spark的运行速度比Hadoop MapReduce快100倍。Spark可以通过控制分区来达到这个速度。它使用分区来管理数据,这些分区有助于以最小的网络流量并行化分布式数据处理。
多数据格式支持:Spark支持多种数据源,如Parquet、JSON、Hive和Cassandra,而不仅仅是文本文件、CSV和RDBMS表等常见格式。数据源API 通过Spark SQL提供了一种可插拔的机制访问结构化数据。数据源不仅仅是一个转换数据并将其输入Spark的简单管道。
惰性计算:Apache Spark将其计算延迟到绝对必要时。这是影响其速度的关键因素之一,对于转换,Spark将它们添加到计算的DAG(有向无环图)中,并且只有当驱动程序请求某些数据时,这个DAG才会真正执行。
实时计算:Spark的计算是实时的,并且由于它的内存计算而具有较低的延迟,Spark是为大规模可扩展性而设计的,Spark团队记录了系统中运行数千个节点的生产集群的用户,并支持多种计算模型。
Hadoop兼容:Apache Spark提供了与Hadoop的平滑兼容性。这对所有从Hadoop开始职业生涯的大数据工程师来说都是一个福音。Spark是Hadoop的MapReduce功能的潜在替代品,通过使用YARN进行资源调度,使其有能力运行在现有Hadoop集群之上。
机器学习:Spark的MLlib是机器学习组件,在处理大数据时非常方便。它消除了使用多个工具的需要,一个用于处理,一个用于机器学习。Spark为数据工程师和数据科学家提供了一个强大的、统一的引擎,既快速又易于使用。
Spark教程:Spark入门
开始使用Spark的第一步是安装。让我们在Linux系统上安装Apache Spark 2.1.0(我使用的是Ubuntu)。
安装:
1、安装Spark的先决条件是安装Java和Scala。
2、从Scala Lang官方页面下载最新的Scala版本。安装后,在~/.bashrc文件中设置Scala路径。
3、从ApacheSpark下载页面下载Spark 2.3.2。您还可以选择下载以前的版本。
4、解压Spark压缩包到安装目录
5、在~/.bashrc文件中设置Spark_路径。
在进一步讨论之前,让我们在系统上启动Apache Spark,并熟悉Spark的主要概念,如Spark会话、数据源、rdd、数据帧和其他库。
Spark Shell:
Spark的shell提供了一个简单的学习API的方法,以及一个强大的交互分析数据的工具。
Spark Session:
在早期版本的Spark中,Spark 上下文是Spark的入口点。对于其他每个API,我们需要使用不同的上下文。对于流式处理,我们需要StreamingContext、sqlContext和hive HiveContext。为了解决这个问题,出现了SparkSession。它本质上是SQLContext、HiveContext和future StreamingContext的组合。
Data Source:
Data Source API提供了一种可插拔的机制,用于通过Spark SQL访问结构化数据。Data Source API用于将结构化和半结构化数据读取并存储到Spark SQL中,Data Source不仅仅是转换数据并将其拉入Spark的简单管道。
RDD:
弹性分布式数据集(RDD)是Spark的基础数据结构。它是一个不可变的分布式对象集合。RDD中的每个数据集被划分为逻辑分区,逻辑分区可以在集群的不同节点上计算。RDDs可以包含任何类型的Python、Java或Scala对象,包括用户定义的类。
Dataset:
DataSet是数据的分布式集合。可以从JVM对象构造数据集,然后使用函数转换(map、flatMap、filter等)进行操作。DataSet API在Scala和Java中可用。
DataFrames:
DataFrame是组织成命名列的Dataset。它在概念上等同于关系数据库中的表或R/Python中的数据帧,但内部做了更丰富的优化。DataFrames可以由各种各样的源构建,例如:结构化数据文件、Hive中的表、外部数据库或现有的RDDs。
Spark教程:在Hadoop中使用Spark
Spark最好的部分是它与Hadoop的兼容性。因此,这就形成了一个非常强大的技术组合。在这里,我们将看到Spark如何从Hadoop中获益。
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有以下组件:
1、Spark Core
2、Spark Streaming
3、Spark SQL
4、GraphX
5、MLlib (Machine Learning)
Spark Core
Spark Core是大规模并行分布式数据处理的基础引擎,其核心是分布式执行引擎和通过Java、Scala和python 等API为分布式ETL应用开发提供平台。此外,构建在核心之上的其他库允许流式处理、SQL和机器学习等不同的工作负载,它的主要职责有:
1、内存管理和故障恢复
2、在集群上调度、分发和监视作业
3、与存储系统交互
Spark Streaming
Spark Streaming是Spark的组成部分,用于处理实时流数据。因此,它是对Spark Core API的有益补充。它支持高吞吐量和高容错的实时数据流处理。基本流单元是DStream,它基本上是一系列处理实时数据的rdd(弹性分布式数据集)。
Spark SQL
Spark SQL是Spark中的一个新模块,它将关系数据处理与Spark的函数式编程API集成在一起。它支持通过SQL或Hive查询语言查询数据,对于熟悉RDBMS的人来说,可以从早期的工具简单过度到Spark SQL,从而扩展传统关系数据处理的边界。
Spark SQL将关系数据处理与Spark的函数式编程集成在一起。此外,它还提供了对各种数据源的支持,并将编写代码转换编写SQL查询语句成为可能,使其成为一个非常强大的工具。
下面是Spark SQL的四个库。
1、Data Source API
2、DataFrame API
3、Interpreter & Optimizer
4、SQL Service
GraphX
GraphX是用于图形和图形并行计算的Spark API。因此,它用一个弹性分布属性图扩展了Spark RDD。
属性图是一个有向的多重图,它可以有多条平行边。每个边和顶点都有与之关联的用户定义的属性。在这里,平行边允许同一个顶点之间有多个关系,GraphX通过引入弹性分布属性图扩展了Spark RDD抽象:一个每个顶点和边都有属性的有向多重图。
为了支持图计算,GraphX公开了一组基本运算符(例如,子图、连接点和mapReduceTriplets)以及Pregel API的优化变体。此外,GraphX还包括越来越多的图形算法和构建器,以简化图形分析任务。
MLlib(机器学习)
MLlib代表机器学习库。Spark MLlib用于在apache spark中执行机器学习。
用例:使用Spark进行地震探测
现在我们已经了解了Spark的核心概念,让我们使用apache spark解决一个实际问题。这将有助于我们有信心在未来的任何Spark项目工作。
问题陈述:设计一个实时地震探测模型来发送求救警报,改模型通过改进其机器学习,以提供接近实时的计算结果。
用例 – 需求:
1、实时处理数据处理
2、处理来自多个源的输入
3、系统易用性
4、警报的批量传输
我们将使用Apache Spark,它是满足我们需求的完美工具。
用例-数据集:
在进行下一步之前,有一个概念我们必须学习,我们将在我们的地震探测系统中使用,它被称为 受试者工作特征曲线(ROC)。ROC曲线根据判别阈值的不同,其代表的二元分类器系统的表现也会不同。我们将使用ApacheSpark中的机器学习,通过训练数据集的方式获取ROC值。
用例-流程图:
下图清楚地说明了地震探测系统 中涉及的所有步骤。
用例-Spark实现:
接下来,让我们使用Eclipse IDE for Spark实现我们的项目。
在下面是伪代码:
从Spark程序中,我们得到ROC值为0.088137。我们将转换这个值以得到ROC曲线下的面积。
用例-可视化结果:
我们将绘制ROC曲线并将其与特定地震点进行比较。当地震点超过ROC曲线时,这些点被视为大地震。根据我们计算ROC曲线下面积的算法,我们可以假设这些大地震在里氏6.0级以上。
上图用橙色显示地震线。蓝色区域是我们从Spark程序中获得的ROC曲线。让我们放大曲线以获得更好的图像。
我们绘制了地震曲线与ROC曲线的对比图。在橙色曲线高于蓝色区域的点上,我们预测为地震,即震级大于6。因此,借助于这一知识,我们可以使用Spark SQL并查询现有的Hive表来检索电子邮件地址并发送个性化的警告电子邮件。因此,我们又一次用科技来拯救人类的生命,使每个人的生活都变得更好。