Spark中Driver和Executor的个人理解

最近在学习spark,里面存在很多的概念,比较抽象。在这里说下个人对Spark中Driver和Executor的理解。

Driver:Driver是Spark中Application也即代码的发布程序,可以理解为我们编写spark代码的主程序,因此只有一个,负责对spark中SparkContext对象进行创建,其中SparkContext对象负责创建Spark中的RDD(Spark中的基本数据结构,是一种抽象的逻辑概念),因为Spark中的数据大多来源于HDFS,因此文件的位置是分布式的,RDD即把这些分布式的文件抽象成一个整体的数据结构,进行相应操作。
Driver的另外一个职责是将任务分配给各个Executor进行执行。任务分配的原则主要是就近原则,即数据在哪个Executor所在的机器上,则任务分发给哪个Exectuor。

Executor:是Spark中执行任务的计算资源,可以理解为分布式的CPU,每台机器可能存在多个Executor(因为计算机的CPU有多个核),这些分布式的计算机集群会有很多的Executor,Executor主要负责Spark中的各种算子的实际计算(如map等),

这部分是个人理解:Spark中的各种转换算子并不会进行实际计算,仅仅是一种对原始RDD的逻辑映射,只有当Action行动算子进行计算时,即需要把数据进行存储或者发回到Driver用于其他操作,才会真正的对这些算子进行一系列的运算。(有时间可以再写一篇关于运算任务的划分)

通俗的来说,Driver相当于一个跨省公司的总工头,这个公司在各省有很多分工厂,这些工厂就相当于一个个Executor,当有一个新的任务时,总工头把这个任务进行分解成多个子任务,按照一定的原则,即哪个工厂所在地有该子任务的原材料(相当于数据),就把相应的子任务分发给该工厂,当这些工厂完成任务时,再向总工头汇报,并按照要求对生产的产品进行一系列的操作。

你可能感兴趣的:(spark)