3.Spark设计与运行原理,基本操作

发布时间:2022-06-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了3.Spark设计与运行原理,基本操作脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

  Spark生态圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等组件,这些组件可以非常容易地把各种处理流程整合在一起,而这样的整合,在实际的数据分析过程中是很有意义的。不仅如此,Spark的这种特性还大大减轻了原先需要对各种平台分别管理的依赖负担。下面,通过一张图描述Spark的生态系统,具体如图1所示

3.Spark设计与运行原理,基本操作

 图1 Spark生态系统

 

  通过图1可以看出,Spark生态系统主要包含Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX以及独立调度器,下面针对上述组件进行一一介绍。

  Spark Core

  Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed Datasets,简称RDD)的API 定义,RDD是只读的分区记录的集合,只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。

  

  Spark SQL

  用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、HBase等多种外部数据中的数据。Spark SQL的重要特点是能够统一处理关系表和RDD。在处理结构化数据时,开发人员无需编写Mapreduce程序,直接使用SQL命令就能完成更加复杂的数据查询操作。

 

  Spark Streaming

  Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。Spark Streaming支持多种数据源,例如Kafka、Flume以及TCP套接字等数据源。

 

  MLlib

  Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能,开发人员只需了解一定的机器学习算法知识就能进行机器学习方面的开发,降低了学习成本

 

  GraphX

  Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口以及丰富的功能和运算符,极大的方便了对分布式图处理的需求,能在海量数据上运行复杂的图算法。

 

  独立调度器、Yarn、Mesos

   Spark框架可以高效地在一个到数千个节点之间伸缩计算,集群管理器则主要负责各个节点的资源管理工作,为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,Hadoop Yarn、apache Mesos以及Spark自带的独立调度器都被称为集群管理器。

  综上所述,Spark框架对大数据的支持从内存计算、实时处理到交互式查询,进而发展到图计算和机器学习模块。Spark生态系统广泛的技面,一方面挑战占据大数据市场份额最大的Hadoop,另一方面又随时准备迎接后起之秀Flink、Kafka等计算框架的挑战,从而使Spark在大数据领域更好的发展。

 

二.请详细阐述Spark的几个主要概念及相互关系:

  Master, Worker;  RDD,DAG;

  Application, job,stage,task; driver,executor,Claster ;manager,DAGScheduler, TaskScheduler.

Worker:集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点。

RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。

DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系。

Application:Application都是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。

Task:被送到某个Executor上的工作单元,但HadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责

Job:包含多个Task组成的并行计算,往往由Spark Action触发生成,一个Application中往往会产生多个Job

Stage:每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生Shuffle的地方

Driver:Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver

Executor:某个Application运行在worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor,在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象,负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task,这个每一个CoarseGrainedExecutor Backend能并行运行Task的数量取决于分配给它的cup个数

DAGScheduler:根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TASKScheduler。其划分Stage的根据是RDD之间的依赖的关系找出开销最小的调度方法。

TASKScheduler:将TaskSET提交给Worker运行,每个Executor运行什么Task就是在此处分配的,TaskScheduler维护所有TaskSet,当Executor向Driver发生心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。

相互关系:

3.Spark设计与运行原理,基本操作

 

3.Spark设计与运行原理,基本操作

 

 三.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。 

>>> sc

>>> lines = sc.textFile("file:///usr/local/spark/wc/my.txt")

>>> lines

>>> words=lines.flatMap(lambda line:line.splIT())

>>> words

>>> wordKV=words.map(lambda word:(word,1))

>>> wordKV

>>> wc=wordKV.reduceByKey(lambda a,b:a+b)

>>> wc

>>> cs=lines.flatMap(lambda line:list(line))

>>> cs

>>> cKV=cs.map(lambda c:(c,1))

>>> cKV

>>> cc=cKV.reduceByKey(lambda a,b:a+b)

>>> cc 

 

>>> lines.foreach(PRint)

开始会报错,需要用到这个语句

 

From __Future__ import print_function

  

3.Spark设计与运行原理,基本操作

 

>>> words.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

>>> wordKV.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

>>> cs.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

>>> cKV.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

>>> wc.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

>>> cc.foreach(print)

3.Spark设计与运行原理,基本操作

 

 

相应的RDD转换关系图

3.Spark设计与运行原理,基本操作

 

 

 

脚本宝典总结

以上是脚本宝典为你收集整理的3.Spark设计与运行原理,基本操作全部内容,希望文章能够帮你解决3.Spark设计与运行原理,基本操作所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。