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

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

答:

  目前,Spark生态系统已经发展成为一个可应用于大规模数据处理的统一分析引擎,它是基于内存计算的大数据并行计算框架,适用于各种各样的分布式平台系统。在Spark生态圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等组件,这些组件可以非常容易地把各种处理流程整合在一起,而这样的整合,在实际数据分析过程中是很有意义的。不仅如此,Spark的这种特性还大大减轻了原先需要对各种平台分别管理的依赖负担。

 

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

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

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

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

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

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

 

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

  Master, Worker;  RDD,DAG;Application, job,stage,task; driver,executor,Claster Manager

  DAGScheduler, TaskScheduler.

答:

1)Master

主要是控制、管理和监督整个spark集群

2)Worker

从节点,负责控制计算节点,启动Executor或者Driver。在YARN模式中为NodeManager,负责计算节点的控制。

3)RDD

Spark的基础计算单元,一组RDD可形成执行的有向无环图RDD Graph。

4)DAG

DAG 是一个应用被切分为任务之后的执行的相关处理流程,主要是用来控制任务的执行顺序和调用的数据,它是一个有向无环图。

5)Application

用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

6)Job

包含多个Task组成的并行计算,是由Action行为触发的

 

7)Stage

一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency(宽依赖)的概念。

8)Task

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

9)Driver

负责应用的业务逻辑和运行规划(DAG—有向无环图)。

10)Executor

由若干core组成,每个Executor的每个core一次只能执行一个Task。

11)Cluster Manager

集群上获取资源的外部服务,比如Standalone(由Master负责资源的分配)和Yarn(由ResourceManager负责资源的分配)DAGScheduler

根据作业(task)构建基于Stage的DAG,并提交Stage给TaskScheduler。

12)DAGScheduler

(高级的调度器接口):负责将Task拆分成不同Stage的具有依赖关系(包含RDD的依赖关系)的多批任务,然后提交给TaskScheduler进行具体处理。

13)TaskScheduler

(低级的调度器接口):负责实际每个具体Task的物理调度执行。

 

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

相应的RDD转换关系图

posted @ 2022-03-10 19:39  Ah若生  阅读(47)  评论(0)    收藏  举报