资源调度是Spark中比较重要的内容,对调度的相关原理以及策略的了解对集群的运行以及优化都会有很大的帮助,资源调度的方式有多种,Local,Standlone,Yarn,Mesos等,本文只针对Standlone的方式做简介
几个重要的概念
开始文章之前,再次对几个核心的概念做一个总结
被调用对象
- Application:Spark 的应用程序,用户提交后,Spark为App分配资源,将程序转换并执行,其中Application包含一个Driver program和若干Executor
- Job:一个RDD Graph触发的作业,往往由Spark Action算子触发,在SparkContext中通过runJob方法向Spark提交Job
Stage:每个Job会根据RDD的宽依赖关系被切分很多Stage, 每个Stage中包含一组相同的Task, 这一组Task也叫TaskSet
Task:一个分区对应一个Task,Task执行RDD中对应Stage中包含的算子。Task被封装好后放入Executor的线程池中执行
调用参与方
Driver:运行Application的main()函数并且创建SparkContext
Worker Node:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程
- Executor:是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务
SparkCon