spark运行时的架构

spark运行时的架构

 在分布式的环境下,spark集群采用的是主/从结构。在一个spark集群中,有一个节点负责中央协调,调度各个分布式工作节点。这个中央协调节点被称为驱动器节点,与之对应的工作节点被称为执行器节点。驱动器节点可以和大量的执行器节点进行通信,它们也都作为独立的java进程运行。驱动器节点和所有的执行器节点一起被称为一个spark应用。

spark应用通过一个叫做集群管理器(Cluster   Manager)的外部服务在集群中的机器上启动。

1.驱动器节点

spark驱动器是执行程序中main()方法的进程。它执行用户编写的用来创建SparkContext,创建RDD,以及进行RDD的转化操作和行动操作的代码。在启动spark  shell时,就启动了一个spark驱动器程序,驱动器程序一旦终止,spark应用也就结束了.

驱动器程序在spark应用下的职责:

1)把用户程序转化为任务。spark驱动器程序负责把用户程序转化为多个物理执行的单元,这些单元也被称为任务(task)。从上层来看,所有的spark程序都遵循同样的结构:程序从输入数据创建一系列的RDD再使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD中的数据。spark程序其实是隐式地创建出了一个由操作组成的逻辑上的有向无环图(DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。spark会对逻辑计划作一些优化,比如将连续的映射转为流水线化执行,将多个操作合并到一个步骤中等。这样spark就把逻辑计划转为一系列步骤(stage)。而每个步骤又由多个任务组成。这些任务会打包并送到集群中。任务是spark中最小的工作单元,用户程序通常要启动成百上千的独立任务。

2)为执行器节点调度任务。有了物理执行计划之后,spark驱动器必须在各个执行器进程间协调任务的调度。执行器进程启动之后,会向驱动器进程注册自己。因此,驱动器进程始终对应用中所有的执行器节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。

2.执行器节点

spark执行器节点是一种工作进程,负责在spark作业中运行任务,任务间相互独立。spark应用启动时,执行器节点就被同时启动,并且始终伴随着整个spark应用的生命周期而存在。

两大作用:

1)负责运行组成spark应用的任务,并将结果返回给驱动器进程;

2)通过自身的块管理器(Block  Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

3.集群管理器

spark依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖于集群管理器来启动驱动器节点。

spark中使用驱动器节点和执行器节点来描述执行spark应用的进程。而主节点(master)和从节点(worker)分别表述集群管理器中的中心化部分和分布式部分。

eg:hadoop  yarn会启动一个叫做资源管理器(Resource   Manager)的主节点守护进程,以及一系列叫做节点管理器(Node  Manager)的工作节点守护进程。而在Yarn的工作节点上,spark不仅可以运行执行器进程,还可以运行驱动器进程)。

你可能感兴趣的:(spark运行时的架构)