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

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

 

组件介绍

1 . Spark Core:Spark的核心组件,其操作的数据对象是RDD(弹性分布式数据集)
图中在Spark Core上面的四个组件都依赖于Spark Core,可以简单认为Spark Core就是Spark生态系统中的离线计算框架,eg:Spark Core中提供的map,reduce算子可以完成mapreduce计算引擎所做的计算任务

2 . Spark Streaming:Spark生态系统中的流式计算框架,其操作的数据对象是DStream,其实Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Core,也就是把Spark Streaming的输入数据按照batch size(批次间隔时长)(如1秒)分成一段一段的数据系列(DStream),每一段数据都转换成Spark Core中的RDD,然后将Spark Streaming中对DStream的转换计算操作变为针对Spark中对RDD的转换计算操作.

在内部实现上,DStream由一组时间序列上连续的RDD来表示。每个RDD都包含了自己特定时间间隔内的数据流(如上图中0到1秒接收到的数据成为一个RDD,1到2秒接收到的数据成为一个RDD),使用Spark Streaming对图中DStream的操作就会转化成使用Spark Core中的对应算子(函数)对Rdd的操作

3 . Spark Sql:可以简单认为可以让用户使用写SQL的方式进行数据计算,SQL会被SQL解释器转化成Spark core任务,让懂SQL不懂spark的人都能通过写SQL的方式进行数据计算,类似于hive在Hadoop生态圈中的作用,提供SparkSql CLI(命令行界面),可以再命令行界面编写SQL

4 . Spark Graphx:Spark生态系统中的图计算和并行图计算,目前较新版本已支持PageRank、数三角形、最大连通图和最短路径等6种经典的图算法

5 . Spark Mlib:一个可扩展的Spark机器学习库,里面封装了很多通用的算法,包括二元分类、线性回归、聚类、协同过滤等。用于机器学习和统计等场景

6 . Tachyon:Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS

7 . Local,Standalone,Yarn,Mesos:Spark的四种部署模式,其中Local是本地模式,一般用来开发测试,Standalone是Spark 自带的资源管理框架,Yarn和Mesos是另外两种资源管理框架,Spark用哪种模式部署,也就是使用了哪种资源管理框架

 

2.请阐述Spark的几个主要概念及相互关系:RDD,DAG,Application, job,stage,task,Master, worker, driver,executor,Claster Manager

 

一、RDD

RDD 的全称是 Resilient Distributed Dataset ,是一个弹性的 ,可复原(可容错)的分布式数据集 .

是 Spark 中最基本的抽象数据集,是一个不可变的 / 有多个分区的 / 可以并行计算的集合 . RDD 中并不装真正要计算的数据 ,而装的是描述信息 ,描述以后从哪里读取数据 ,调用了什么方法 ,传入了什么函数 ,以及依赖关系等 .

可以认为是一个代理 ,你对RDD进行操作 ,相当于在Driver端先是记录下计算的描述信息 ,然后生成Task ,将Task 调度到 Executor端才执行真正的计算逻辑 .

二、 Application

1.使用 SparkSubmit 提交的一个计算应用  ;

2.一个Application 中可以触发多次 Action ,触发一次 Action 产生一个 Job ;

3.一个Application 中可以有一到多个 Job .

三、DAG

1.DAG 是指有向无环图(有方向 ,无闭环) ;

2.是对多个RDD转换过程和依赖关系的描述 ;

3.触发 Action 就会形成一个完整的 DAG ,一个DAG 对应一个 Job .

四、 Job

1.Driver 端向 Executor 提交的作业 ,触发一次 Action 形成一个完整的 DAG ;

2.一个DAG 对应一个 Job ;

3.一个Job 中有一到多个Stage ,一个Stage 对应一个TaskSet ,一个TaskSet 中有一到多个 Task .

五、 Stage

1.Stage 是指任务执行阶段 ;

2.Stage 执行是有先后顺序的 ,先执行前面的 ,再执行后面的 ;

3.一个Stage 对应一个TaskSet ,一个TaskSet 中的 Task 的数量取决于Stage 中最后一个RDD 分区的数量 .

六、Task

1.是Spark中任务最小的执行单位 ,Task 分类两种 ,即 ShuffleMapTask 和 ResultTask .

ShuffleMapTask :

1) 可以读取各种数据源的数据

2) 也可以读取shuffle后的数据

3) 专门为shuffle做准备

ResultTask :

1) 可以读取各种数据源的数据

2) 也可以读取shuffle后的数据

3) 专门为了产生计算结果

2.Task 其实就是类的实例 ,有属性(从哪里读取数据/读取的是哪个切片的数据) ,有方法(如何计算 / 即数据的计算分析逻辑) ;

3.Task 的数量取决于Stage 中最后一个RDD分区的数量 ,Task 的数量决定并行度(分区数) ,同时也要考虑Spark 中可用的 cores .

七、master和worker是物理节点,driver和executor是进程。

1.master和worker节点
搭建spark集群的时候我们就已经设置好了master节点和worker节点,一个集群有多个master节点和多个worker节点。

master节点常驻master守护进程,负责管理worker节点,我们从master节点提交应用。

worker节点常驻worker守护进程,与master节点通信,并且管理executor进程。

2.driver和executor进程
driver进程就是应用的main()函数并且构建sparkContext对象,当我们提交了应用之后,便会启动一个对应的driver进程,driver本身会根据我们设置的参数占有一定的资源(主要指cpu core和memory)。下面说一说driver和executor会做哪些事。

driver可以运行在master上,也可以运行worker上(根据部署模式的不同)。driver首先会向集群管理者(standalone、yarn,mesos)申请spark应用所需的资源,也就是executor,然后集群管理者会根据spark应用所设置的参数在各个worker上分配一定数量的executor,每个executor都占用一定数量的cpu和memory。在申请到应用所需的资源以后,driver就开始调度和执行我们编写的应用代码了。driver进程会将我们编写的spark应用代码拆分成多个stage,每个stage执行一部分代码片段,并为每个stage创建一批tasks,然后将这些tasks分配到各个executor中执行。

executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor持有一个线程池,每个线程可以执行一个task,executor执行完task以后将结果返回给driver,每个executor执行的task都属于同一个应用。此外executor还有一个功能就是为应用程序中要求缓存的 RDD 提供内存式存储,RDD 是直接缓存在executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

八、ClusterManager

 集群资源管理器,自带的或Mesos或YARN,负责处理在Worker Node上运行应用所需的资源。

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

 

 

 

 

 

 

 

 

posted @ 2022-03-13 19:54  usershino  阅读(55)  评论(0)    收藏  举报