Spark[一]——Spark的进程们[Driver、Master、Worker、Executor]

Spark[一]——Spark的进程们[Driver、Master、Worker、Executor]

一、背景知识

1.进程

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体,进程包括程序、数据集合和进程控制块三部分。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合石程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息,是进程存在的唯一标识。

2.线程

线程是程序执行中一个单一的顺序执行控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或者多个线程,各个线程之间的共享程序的内存空间(即所在进程的内存空间)。

二、正题——Spark中的进程们

1.Driver进程

Driver是Spark的驱动器节点,用于执行我们提交的Spark程序中的main方法,负责我们提交的Spark实际代码的执行工作。总的来说,Driver就是创建Spark上下文(SparkContext),并对我们提交的这个具体的事务负责(调度、运行、监控),至于Driver负责的具体任务,话不多说直接放个图好了:

img

1.1用户程序转化为任务(job)

在我们提交了自己的Spark程序(Application)后,总要有一个东西来把这个逻辑上的代码拆解成可以执行的小块儿,Driver就负责干这个活儿。由于Spark是惰性执行,也就是说,只有遇到Action算子(如take,write…)时才会触发相关的transfor操作,我们提交的Spark代码里,有一个Action算子,就会被拆解成几个Job。Spark Application的拆解不多说,又上个图:

img

1.2.在Executor之间调度任务(task)

Driver负责分配这些个task的具体任务,emmmmmm…就结合图【Application划分成可执行的task】看吧,也没啥了;

1.3.跟踪Executor执行情况

这个Driver不光要分配,他还要让Executor来执行这些task,不然他的分配就白干了,一个Executor执行完一批task,他还要监督着再执行一批task,当然要知道这些Executor对task执行的咋样了;

1.4.通过UI展示运行情况

这个也没啥说的,SparkUI嘛。

2.Master进程

img

Master进程就像是个后勤部长,管一管资源的调度和分配,再对集群大环境的情况进行一下监控。

3.Worker进程

img

一个Worker运行在集群中的一台服务器上。2.用自己的内存存储RDD的一些Partition见Spark[三]——Spark对内存的管理

4.Executor进程

img

三、各个进程间的关系大图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxyNXe43-1603953470136)(https://upload-images.jianshu.io/upload_images/20046095-85ee0613c26d769c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

Spark中Driver、Master、Worker、Executor进程的调度大致关系如图,如有疏漏,欢迎指正。

叉会儿腰…

img

欢迎继续收看Spark[二]——Spark的组件们、Spark[三]——Spark对内存的管理。。。。。。

注:图为原创,如有转载请注明出处