资源调度
说明:
Application的调度算法有两种,分别为spreadOutApps和非spreadOutApps
spreadOutApps
- 在spark-submit脚本中,可以指定要多少个executor,executor需要多少个cpu及多少内存,基于该机制,最后executor的实际数量,以及每个executor的cpu可能与配置是不一样的。
- 因为spreadOutApps调度算法的总是基于总CPU总和来分配,比如要求3个executor每个要3个CPU,如果有9个worker每个有1个CPU,因为总共要分配9个core,所以每个worker分配一个core然后每个worker启动一个executor
- 最后启动9个executor每个executor1个cput core
非spreadOutApps
- 每个application都尽可能分配到尽量少的worker上,比如总共有10个worker,每个有10个core app总共要分配20个core,那么其实只会分配到两个worker上,每个worker都占满10个core.
Schdule方法源码分析
1 | |
16 | |
17 | |
24 | |
28 | |
55 | |
60 | |
62 | ) { |
89 | // 根据WorkerInfo和所需的core构建ExecutorDesc |
90 | val exec = app.addExecutor(worker, coresToUse) |
91 | // 启动Executor |
92 | launchExecutor(worker, exec) |
93 | app.state = ApplicationState.RUNNING |
94 | } |
95 | } |
96 | } |
97 | } |
98 | } |
99 | } |