适合小白入门Spark的全面教程

Apache Spark是一个用于实时处理的开源集群计算框架。 它是Apache软件基金会中最成功的项目。 Spark已成为大数据处理市场的领导者。 今天,Spark被亚马逊,eBay和雅虎等主要厂商采用。 许多组织在具有数千个节点的集群上运行Spark。 这篇文章所讲内容包括Spark Streaming,Spark Interview Questions,Spark MLlib等。 在实时数据分析方面,Spark在所有其他解决方案中脱颖而出。 通过这篇文章将向大家介绍使用Spark进行地震检测。 以下是此Spark教程中涵盖的主题:
  • 实时分析
  • 有了Hadoop,为什么使用spark
  • 什么是spark
  • Apache Spark的功能
  • spark实践及概念、组件介绍
  • 使用基于Hadoop的Spark
  • Spark 组件
  • 使用案例:使用Spark进行地震检测

1.实时分析 在我们开始之前,让我们来看看美国社交媒体比较有名的企业每分钟产生的数据量。

图:每分钟生成的数据量 我们可以看到,互联网世界需要在几秒钟内处理大量数据。 正如我们所看到的,网络有大量的数据需要在几秒钟内处理。我们将通过处理企业中的大数据的阶段,发现需要一个实时处理框架,那就是Apache Skar的实时处理框架,解决了此问题。 首先,首先,让向大家介绍当今世界使用实时分析的几个大领域。

我们可以看到,大数据的实时处理已经深入我们生活的方方面面。从银行的欺诈检测到政府的实时监控系统、医疗自动化设备在股市中的实时预测系统,我们周围的一切都围绕着实时处理大数据。 我们来看看实时分析的一些用法: 医疗保健:医疗保健领域使用实时分析来持续检查关键患者的医疗状况。寻找血液和器官移植的医院需要在紧急情况下保持实时联系。及时就医是患者生死攸关的问题。 政府:政府机构主要在国家安全领域进行实时分析。各国需要不断跟踪警察和安全机构对于威胁的更新。 电信:以电话,视频聊天和流媒体实时分析等形式围绕服务的公司,以减少客户流失并保持领先竞争优势。他们还提取移动网络的测量结果。 银行业务:银行业务几乎涉及全球所有资金。确保整个系统的容错事务变得非常重要。通过银行业务的实时分析,可以实现欺诈检测。 股票市场:股票经纪人使用实时分析来预测股票投资组合的变动。公司通过使用实时分析来推销其品牌的市场需求,从而重新思考其业务模式。 spark思想及实现 2.有了Hadoop,为什么使用spark 每个人都问过Spark的第一个问题,“当我们已经拥有Hadoop时,为什么选择Spark?”。 要回答这个问题,我们必须考虑批处理和实时处理的概念。 Hadoop基于批处理的概念。 Hadoop MapReduce是批量处理数据的最佳框架。 这一直持续到2014年,直到Spark超越Hadoop。 在批量处理大型数据集时,USP for Spark比Hadoop MapReduce快100%。 下图详细说明了Spark和Hadoop之间的区别。

在这里,我们可以得出Hadoop和Spark之间的一个关键区别。 Hadoop基于大数据的批处理。 这意味着数据会在一段时间内存储,然后使用Hadoop进行处理。 在Spark中,处理可以实时进行。 Spark中的这种实时处理能力帮助我们解决了上一节中的实时分析问题。 除此之外,Spark还能够比Hadoop MapReduce( Hadoop处理框架)快100倍地进行批处理。 因此,Apache Spark是业界大数据处理的首选工具。 3.什么是spark Apache Spark是一个用于实时处理的开源集群计算框架。 它拥有蓬勃发展的开源社区,是目前最活跃的Apache项目。 Spark提供了完整编程的接口,具有数据并行性和容错性。

图:Spark教程 - Apache Spark中的实时处理 它建立在Hadoop MapReduce之上,它扩展了MapReduce模型以使用更多类型的计算。 4.Apache Spark的功能 spark有以下功能

图:Spark教程 - Spark功能 详细内容如下: 支持多种语言 Spark提供Java,Scala,Python和R中的高级API .Spark代码可以用任何这些语言编写。 它在Scala和Python中提供了一个shell。 可以通过./bin/spark-shell和Python shell通过./bin/pyspark从已安装的目录访问Scala shell。

相关资料推荐 使用Java编写并运行Spark应用程序 http://www.aboutyun.com/forum.php?mod=viewthread&tid=10791 Spark开发语言Scala语言 http://www.aboutyun.com/forum.php?mod=viewthread&tid=6771 Spark python 开发者 ---Spark流式数据处理 http://www.aboutyun.com/forum.php?mod=viewthread&tid=18866 速度 Spark的运行速度比Hadoop MapReduce快100倍,适用于大规模数据处理。 Spark能够通过分区实现此速度。 它使用分区管理数据,这些分区有助于以最小的网络流量并行化处理分布式数据。

多种格式 Spark支持多种数据源,如Parquet,JSON,Hive和Cassandra,CSV和RDBMS表,还包括通常的格式,如文本文件、CSV和RDBMS表。 Data Source API提供了一种可插拔的机制,用于通过Spark SQL获取结构化数据。

延后计算 Apache Spark延迟是绝对必要的。 这是影响其速度的关键因素之一。对于转换(transformations),Spark将它们添加到DAG(有向无环图)的计算中,并且只有当驱动程序请求一些数据时,这个DAG才会实际执行。

实时计算 Spark的计算是实时的,并且由于其内存计算具有低延迟。 Spark专为大规模可扩展性设计,Spark团队已经记录了运行具有数千个节点的生产集群的用户,并支持多种计算模型。

整合Hadoop Apache Spark提供与Hadoop的平滑兼容性。 这对所有从事Hadoop大数据工程师来说都是一个福音。 Spark是Hadoop的MapReduce的潜在替代品,而Spark能够使用YARN在现有的Hadoop集群上运行资源调度。

资料推荐 如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】 http://www.aboutyun.com/forum.php?mod=viewthread&tid=23252 机器学习 Spark的MLlib是机器学习组件,在大数据处理方面很方便。 它消除了使用多种工具的需求,一种用于处理,一种用于机器学习。 Spark为数据工程师和数据科学家提供了一个功能强大,统一的引擎,既快速又易于使用。

其它资料推荐: SPARK MLLIB机器学习 http://www.aboutyun.com/forum.php?mod=viewthread&tid=24700 5.spark实践及概念、组件介绍 开始使用Spark的第一步是安装。 让我们在Linux系统上安装Apache Spark 2.1.0(我使用的是Ubuntu)。 安装 1.安装Spark的先决条件是安装Java和Scala。 2.如果未使用以下命令安装Java,请下载Java。

[Bash shell] 纯文本查看 复制代码

?

sudo apt-get install python-software-properties
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

3.从Scala Lang官方(http://www.scala-lang.org/)页面下载最新的Scala版本。 安装完成后,在〜/ .bashrc文件中设置scala路径,如下所示。

[Bash shell] 纯文本查看 复制代码

?

export SCALA_HOME=Path_Where_Scala_File_Is_Located
export PATH=$SCALA_HOME/bin:PATH

4.从Apache Spark下载页面(http://spark.apache.org/downloads.html)下载Spark 2.1.0。 您也可以选择下载以前的版本。 5.使用以下命令提取Spark tar。

[Bash shell] 纯文本查看 复制代码

?

tar -xvf spark-2.1.0-bin-hadoop2.7.tgz

6.在〜/ .bashrc文件中设置Spark_Path。

[Bash shell] 纯文本查看 复制代码

?

export SPARK_HOME=Path_Where_Spark_Is_Installed
export PATH=$PATH:$SPARK_HOME/bin

在我们下一步之前,在我们的系统上启动Apache Spark,并熟悉Spark的主要概念,如Spark Session,数据源,RDD,DataFrame和其他库。 Spark Shell: Spark的shell提供了一种学习API的简单方法,以及一种以交互方式分析数据的强大工具。 Spark Session: 在早期版本的Spark中,Spark Context是Spark的入口点。 对于每个其他API,我们需要使用不同的上下文。 对于流式传输,我们需要StreamingContext,SQL sqlContext和hive HiveContext。 为了解决这个问题,SparkSession进入了这个问题。 它本质上是SQLContext,HiveContext和未来StreamingContext的组合。 数据源: Data Source API提供了一种可插拔的机制,用于通过Spark SQL访问结构化数据。 Data Source API用于将结构化和半结构化数据读取并存储到Spark SQL中。 数据源不仅仅是简单的管道,可以转换数据并将其拉入Spark。 RDD: 弹性分布式数据集(RDD)是Spark的基本数据结构。 它是一个不可变的分布式对象集合。 RDD中的每个数据集被划分为逻辑分区,其可以在集群的不同节点上计算。 RDD可以包含任何类型的Python,Java或Scala对象,包括用户定义的类。 Dataset: Dataset是分布式数据集合。 数据集可以从JVM对象构造,然后使用功能转换(map,flatMap,filter等)进行操作。 数据集API在Scala和Java中可用。 DataFrames: DataFrame是命名列组织成数据集。 它在概念上等同于关系数据库中的表或R / Python中的数据框,但在引擎盖下具有更丰富的优化。 DataFrame可以从多种来源构建,例如:结构化数据文件,Hive中的表,外部数据库或现有RDD。 其中RDD是比较好理解的,dataset和dataframe可能弄不清他们之间的区别和联系推荐参考: 一图看懂Spark RDD Dataframe DataSet http://www.aboutyun.com/forum.php?mod=viewthread&tid=24893 6.使用基于Hadoop的Spark Spark与Hadoop兼容性的。 因此,这是一种非常强大的技术组合。 下面我们介绍spark与Hadoop整合的好处

图:Spark功能 Hadoop组件可以通过以下方式与Spark一起使用:

  • HDFS:Spark可以在HDFS之上运行,以利用分布式存储。
  • MapReduce:Spark可以与MapReduce一起用于同一个Hadoop集群,也可以单独作为处理框架使用。
  • YARN:可以使Spark应用程序在YARN(Hadoop NextGen)上运行。
  • 批处理和实时处理:MapReduce和Spark一起使用,其中MapReduce用于批处理,Spark用于实时处理。

7.Spark 组件 Spark组件使Apache Spark快速可靠。 构建了很多这些Spark组件来解决使用Hadoop MapReduce时出现的问题。 Apache Spark具有以下组件:

  • Spark Core
  • Spark Streaming
  • Spark SQL
  • GraphX
  • MLlib (Machine Learning)

Spark Core Spark Core是大规模并行和分布式数据处理的基础引擎。 核心是分布式执行引擎,Java,Scala和Python API为分布式ETL应用程序开发提供了一个平台。 此外,在核心上构建的其他库允许用于流式传输,SQL和机器学习的各种工作负载。 它负责:

  • 内存管理和故障恢复
  • 在群集上调度,分发和监视作业
  • 与存储系统交互

Spark Streaming Spark Streaming是Spark的组件,用于处理实时流数据。 因此,它是核心Spark API的补充。 它支持实时数据流的高吞吐量和容错流处理。 基本流单元是DStream,它基本上是一系列用于处理实时数据的RDD(弹性分布式数据集)。

图:spark streaming Spark SQL Spark SQL是Spark中的一个新模块,它使用Spark编程API实现集成关系处理。 它支持通过SQL或Hive查询查询数据。 对于那些熟悉RDBMS的人来说,Spark SQL将很容易从之前的工具过渡到可以扩展传统关系数据处理的边界。 Spark SQL通过函数编程API集成关系处理。 此外,它为各种数据源提供支持,并且使用代码转换编织SQL查询,从而产生一个非常强大的工具。 以下是Spark SQL的四个库。

  • Data Source API
  • DataFrame API
  • Interpreter & Optimizer
  • SQL Service

GraphX GraphX是用于图形和图形并行计算的Spark API。 因此,它使用弹性分布式属性图扩展了Spark RDD。 属性图是一个有向多图,它可以有多个平行边。 每个边和顶点都有与之关联的用户定义属性。 这里,平行边缘允许相同顶点之间的多个关系。 在高层次上,GraphX通过引入弹性分布式属性图来扩展Spark RDD抽象:一个定向多图,其属性附加到每个顶点和边。 为了支持图形计算,GraphX公开了一组基本运算符(例如,subgraph,joinVertices和mapReduceTriplets)以及Pregel API的优化变体。 此外,GraphX包含越来越多的图算法和构建器,以简化图形分析任务。 MlLib (Machine Learning) MLlib代表机器学习库。 Spark MLlib用于在Apache Spark中执行机器学习。

8.使用案例:使用Spark进行地震检测 现在我们已经理解了Spark的核心概念,让我们使用Apache Spark解决现实问题。 这将有助于我们有信心在未来处理任何Spark项目。 问题描述:设计实时地震检测模型以发送救生警报,这应该改善其机器学习,以提供接近实时的计算结果。 用例 - 要求:

  • 实时处理数据
  • 处理来自多个来源的输入
  • 易于使用的系统
  • 批量传输警报

我们将使用Apache Spark,它是满足我们要求的工具。

数据下载: 链接: https://pan.baidu.com/s/1sb5S42oKLdIBzaoJ11dGDA 密码: rx85 在继续前进之前,我们必须了解一个概念,即我们将在地震检测系统中使用它,它被称为接收器操作特性(ROC)。 ROC曲线是图解说明二元分类器系统的性能的图表,因为其辨别阈值是变化的。 我们将使用数据集在Apache Spark中使用机器学习获取ROC值。 用例 - 流程图: 下图清楚地解释了我们的地震检测系统涉及的所有步骤。

用例 - Spark实现: 继续,现在让我们使用Eclipse IDE for Spark实现我们的项目。 找到下面的伪代码:

[Scala] 纯文本查看 复制代码

?

//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 = 11L)
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地震检测】,可获取。

从我们的Spark程序中,我们获得的ROC值为0.088137。 我们将转换此值以获得ROC曲线下的区域。 用例 - 可视化结果: 我们将绘制ROC曲线并将其与特定地震点进行比较。 如果地震点超过ROC曲线,这些点将被视为主要地震。 根据我们计算ROC曲线下面积的算法,我们可以假设这些主要地震在里氏震级上超过6.0级。

上图显示了橙色的地震线。 蓝色区域是我们从Spark程序中获得的ROC曲线。 让我们放大曲线以获得更好的画面。

我们已经根据ROC曲线绘制了地震曲线。 在橙色曲线高于蓝色区域的点处,我们已经预测地震是主要的,即幅度大于6.0。 因此,我们可以使用Spark SQL并查询现有的Hive表来检索电子邮件地址并向人们发送个性化的警告电子邮件。 因此,我们再次使用技术来拯救人类生活中的麻烦。 转载注明本文链接

http://www.aboutyun.com/forum.php?mod=viewthread&tid=24883

原文发布于微信公众号 - About云(wwwaboutyuncom)

原文发表时间:2018-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美图数据技术团队

Hello Spark! | Spark,从入门到精通

欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你,...

32820
来自专栏人工智能LeadAI

想玩转工业界机器学习?先学Spark吧

为什么机器学习者需要学习spark? 关于大数据,有这样段话: “Big data is like teenage sex,everyone talks abo...

43990
来自专栏挖掘大数据

大数据分析平台 Apache Spark详解

Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。自从 Apache Spark 2009 年在...

53400
来自专栏美图数据技术团队

Hello Spark! | Spark,从入门到精通

Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架,是专为大规模数据处理而设计的快速通用的大数...

14800
来自专栏Albert陈凯

Spark生态系统BDAS介绍

1.2 Spark生态系统BDAS 目前,Spark已经发展成为包含众多子项目的大数据计算平台。伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS...

44750
来自专栏Albert陈凯

Spark和MapReduce相比,都有哪些优势?

在实际应用中,由于MapReduce在大量数据处理时存在高延迟的问题,导致Hadoop无力处理很多对时间有要求的场景,越来越多的公司开始采用Spark作为与计算...

35450
来自专栏PPV课数据科学社区

什么是 Apache Spark?大数据分析平台如是说

自从 Apache Spark 2009 年在 U.C. Berkeley 的 AMPLab 默默诞生以来,它已经成为这个世界上最重要的分布式大数据框架之一。S...

33760
来自专栏斑斓

Spark发布1.3.0版本

3月13日,Spark 1.3.0版本与我们如约而至。这是Spark 1.X发布计划中的第四次发布,距离1.2版本发布约三个月时间。据Spark官方网站报道,此...

34160

Apache Spark:大数据领域的下一件大事?

Apache Spark正在引起很大的热议。Databricks是为支持Spark而成立的一个公司,它从Andreessen Horowitz募集到了$ 140...

15140
来自专栏华章科技

SparkR:数据科学家的新利器

摘要:R是数据科学家中最流行的编程语言和环境之一,在Spark中加入对R的支持是社区中较受关注的话题。作为增强Spark对数据科学家群体吸引力的最新举措,最近发...

6920

扫码关注云+社区

领取腾讯云代金券