spark的excutor调优主要考虑两种资源:内存和cpu核心数
优先保证程序可运行的情况下增加excutor数量
在spark中,一个excutor是一个进程,是内存资源分配的基本单位。理论上excutor的数量可以非常大,但是yarn有资源管理的功能,如果excutor占用的资源超过了集群拥有的资源,多余的进程会被挂起。所以第一原则是单个excutor分配的资源要满足程序运行要求的情况下尽量的小,excutor的数量尽量多。
在满足程序可正确运行的基础上,提高并行数。也是就每个excutor的核心数
如果excutor是一个进程的话,那excutor的核心就是该线程的进程了。同一个线程的进程是共享资源的。
折中策略
我们说多个核心是共享内存的,也就意味着,如果我们增加每个excutor的核心数,我们就要增加excutor的内存大小,那excutor的数量就该减少。那我们是该以多进程(多 excutor)为主呢,还是以多线程(多核心)为主呢。
有一个简单的excutor的内存估算策略:
Executor所需最小内存
= 并发任务数 * 单分区大小 + 内存缓存分区数 * 单分区大小
=