Spark架构
Spark官网展示了如下的集群运行架构
其中涉及到以下概念:
概念 | 解释 |
---|---|
Application | 基于Spark的用户程序,包含了1个Driver Program和若干个Executor进程 |
Driver Program | 运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program;监听特定端口以保证和executor的通信 |
SparkContext | Spark代码中定义的一个对象,提供driver program的功能 |
Executor | Application运行在worker node上的一个进程,负责运行Task,并且将数据存在内存或者磁盘上,该进程在application运行期间一直驻留;每个Application都有各自独立的executors,不同application的executor若不通过外部存储,是无法进行数据交互的 |
Cluster Manager | 在集群上获取资源的外部服务,Spark支持Spark Standalone, YARN, Mesos三种cluster manager;但Spark并不依赖于cluster manager,它只需要能获取executor进程并保持通信就可以了 |
Worker Node | 集群中任何可以运行application代码的节点 |
Task | 被送到某个executor上的工作单元;不同application的task运行在不同的JVM中,有着良好的隔离 |
Job | 包含多个Task组成的并行计算,往往由Spark action催生 |
Stage | 每个Job会被拆分很多组task,每组任务被称为Stage,也可称TaskSet |
RDD | Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作) |
DAG Scheduler | 根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler |
Task Scheduler | 将stage提交给worker nodes运行并回报结果 |
Client Deploy Mode | 在client mode下,drive program直接运行在spark-submit进程中,因为driver与worker node的网络通信是非常重要的开销,所以提交application的主机需要和work node处在同一物理网络中,以获得较小的网络延迟;同时,需要实时交互的应用如Spark Shell,是比较适合用client mode的 |
Cluster Deploy Mode | 在cluster mode下,driver program进程由cluster管理,以保证与worker node通信时网路延迟小,所以当用户提交application的设备在集群的网络之外(网络延迟大)的时候,需要用cluster mode来部署;目前YARN只支持Python的cluster部署,而mesos还不能支持cluster部署 |