在程序中指定Spark和Hadoop的用户 spark指定节点运行任务_集群管理


在一个 Spark 集群中,有一个节点负责中央协调,调度各个分布式工作节点。这个中央协调节点被称为驱动器(Driver)节点,与之对应的工作节点被称为执行器(executor)节点。驱动器节点可以和大量的执行器节

点进行通信,它们也都作为独立的 Java 进程运行。驱动器节点和所有的执行器节点一起被称为一个 Spark 应用(application)。

一、Spark驱动程序

Spark 驱动器是执行你的程序中的 main() 方法的进程。它执行用户编写的用来创建SparkContext、创建 RDD,以及进行 RDD 的转化操作和行动操作的代码。

驱动程序职责

1. 把用户程序转为任务

Spark 驱动器程序负责把用户程序转为多个物理执行的单元,这些单元也被称为任务(task)。从上层来看,所有的 Spark 程序都遵循同样的结构:程序从输入数据创建一系列 RDD,再使用转化操作派生出新的 RDD,最后使用行动操作收集或存储结果 RDD中的数据。Spark 程序其实是隐式地创建出了一个由操作组成的逻辑上的有向无环图(Directed Acyclic Graph,简称 DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。

2.为执行器节点调度任务

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

二、执行器节点

Spark 执行器节点是一种工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,执行器节点就被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有执行器节点发生了异常或崩溃,Spark 应用也可以继续执行。执行器进程有两大作用:第一,它们负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
第二,它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

三、集群管理器

Spark 依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖集群管理器来启动驱动器节点。集群管理器是 Spark 中的可插拔式组件。这样,除了 Spark 自带的独立集群管理器,Spark 也可以运行在其他外部集群管理器上,比如 YARN 和 Mesos。