ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-10 15:00:13  阅读:234  来源: 互联网

标签:Executor Worker RDD Master 原理 基本操作 Spark Stage


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

Spark的生态系统主要包含了Spark CoreSpark SQLSpark StreamingStructured StreamingMLlibGraphX等组件。


图1 Spark生态系统的组成及各组件

各个组件的具体功能如下:

Spark Core

Spark Core包含Spark最基础和最核心的功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面向批数据处理。

Spark SQL

用于结构化数据处理的组件,允许开发人员直接处理RDD,同时也可查询Hive,HBase等外部数据源。

Spark Streaming

一种流计算框架,可以支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。

Structrued Streaming

一种基于Spark SQL引擎构建的、可扩展且容错的流处理引擎。

MLlib

MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只需具备一定的理论知识就能进行机器学习的工作。

GraphX

GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写和优化,GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

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

1. Master、Worker

MasterWorker是Spark独立集群里用到的类。如果是yarn环境部署,是不需要这两个类的。

Master是Spark独立集群的控制者,Worker是工作者,一个Spark独立集群需要启动一个Master和多个Worker。

Spark提供了Master选举功能,保障Master挂掉的时候能选出另一个Master,做一个切换的动作,这块原理和ZooKeeper类似。

Master节点常驻Master守护进程,负责管理Worker节点,从Master节点提交应用。

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

2. RDD、DAG

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

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

3. Application、Job、Stage、Task

RDD任务切分中间分为:Application、Job、Stage和Task

(1)Application(应用)

用户编写的Spark应用程序。

(2)Job(作业)

Job是用户程序一个完整的处理流程,是逻辑的叫法。

一个作业可以包含多个RDD及作用于相应RDD上的各种操作。

(3)Stage(阶段)

是作业的基本调度单位,每个作业会因为RDD之间的依赖关系拆分成多组任务集合TaskSet,称为调度阶段。

调度阶段的划分是由DAGScheduler来划分的,有Shuffle Map Stage和Result Stage两种。

(4)Task(任务)

分发到Executor上的工作任务,是spark实际执行应用的最小单元,一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。

一个Stage可以包含多个task,比如sc.textFile("/xxxx").map().filter(),其中map和filter就分别是一个task。

每个task的输出就是下一个task的输出。

4. Driver、Executor、Claster Manager

Driver进程应用 main() 函数并且构建sparkContext对象。

当我们提交了应用之后,便会启动一个对应的Driver进程,Driver本身会根据我们设置的参数占有一定的资源就是Executor。

然后集群管理者会分配一定数量的Executor,每个Executor都占用一定数量的cpu和memory。

这里Executors其实是一个独立的JVM进程,在每个工作节点上会起一个,主要用来执行task,一个executor内,可以同时并行的执行多个task。

而Claster Manager主要负责整个程序的资源调度目前的主要调度器有:YARN、Spark Standalone、Mesos。

5. DAGScheduler、TaskScheduler

DAGScheduler:面向调度阶段的任务调度器,负责接收spark应用提交的作业,根据RDD的依赖关系划分调度阶段,并提交调度阶段给TaskScheduler.

TaskScheduler:面向任务的调度器,它接受DAGScheduler提交过来的调度阶段,然后把任务分发到work节点运行,由Worker节点的Executor来运行该任务

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

 Master,Worker;RDD,DAG;Application,job,stage,task;driver,executor,Cluster ManagerDAGScheduler, 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)TaskScheduler

将任务(task)分发给Executor执行。

 

  相互关系

 

 

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

 

 

复制代码
sc
lines = sc.textFile("file:///home/hadoop/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)

 

 

 

words.foreach(print)

 

 

 

wordKV.foreach(print)

cs.foreach(print)

cKV.foreach(print)

wc.foreach(print)

 

 

cc.foreach(print)

  RDD转换关系图

 

标签:Executor,Worker,RDD,Master,原理,基本操作,Spark,Stage
来源: https://www.cnblogs.com/n1254088/p/15989516.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有