Spark运行架构

1.Spark架构:

官网网址:内容要背下来

http://spark.apache.org/docs/latest/cluster-overview.html

(1)Spark Application: 1个driver + 多个exector

(2)Application jar: 打包生成的jar包

(3)Driver program: 运行application中的main方法并且创建一个SparkContext

(4)Cluster manager: 一个从cluster中申请资源的外部服务

(5)Deploy mode: 决定 drive进程跑在哪里, 如果是 client,表示driver跑在本地,如果是cluster,表示跑在集群里面

(6)Executor :启动应用程序的进程在workernodes上,它能够运行多个task,保存数据到disk和memory中,每个应用程序都有自己的executors

(7)Task:作业的基本单元,每个task都会被送到executor上执行

(8)job:众多task组成的并行计算,一个Spark的action算子产生一个job

(9)stage:一个job会有很多stages,根据shuffle决定, 只要有shuffle就会一分为两个stage,一个stage下会有多个task,stage之间是存在依赖关系的。(例如:map和reduce,必须map先执行完成再执行reduce)

注:grouby和reduceByKey都会触发shuffle,一个stage的task数是由分区数决定的,一个partition就是一个task。

(10)cache:它是一个lazy,将数据缓存到内存中,缓存后的数据会变大。

面试题:cache():底层调用persist()方法

​ persist():底层调用persist方法重载,传入MEMORY_NOLY参数

​ unpersist():去掉缓存

(11)面试题:

​ 窄依赖:(Narrow)一个父RDD的partition只能被一个子RDD的partition使用一次

​ 宽依赖:(Wide,shuffle后的就是宽依赖)一个父RDD的partition能被一个子RDD的partition使用多次

​ 注:(问join是不是宽依赖,这里需要分情况)

(12)面试题:

​ reduceByKey是哪一个类里面的:PairRDDFunction(底层用了隐式转换,new了PairRDDFuction对象,将rdd传入进去)

2.架构图:

应用程序他是一堆独立的进程在集群上,它是通过SparkContext对象在你的main方法中。

为了能让应用程序跑在集群上,SparkContext需要连接到集群管理器上(Cluster Manager),

Cluster Manager会去申请资源,一旦资源拿到,就会有Executor在Worker Node上运行,executor是一顿进程,能够运行计算和存储我们的数据,SparkContext会将你的应用程序代码发送到executors上,最终,SparkContext发送你的tasks到executor上执行。

3.在这个架构上需要注意的事情:

(1)每个应用程序都有自己的exceutors进程

(2)Spark不关注地城集群管理,他可以运行在任意(YARK,Mesos)

(3)Driver 要与 Executor一直保持通信

(4)由于 driver是用来调度tasks在集群上,所以driver应该运行靠近 worker nodes

本文标题:Spark运行架构

文章作者:skygzx

发布时间:2019年05月07日 - 14:28

最后更新:2019年05月09日 - 19:38

原始链接:http://yoursite.com/2019/05/07/Spark运行架构/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
0%