最近发现spark作业运行速度很慢,发现executor实例数设置的太低,所以对job进行了优化
优化前:800G压缩文件 30分钟
优化后:800G压缩文件 2分钟
========================
参数优化:
task的执行速度是跟每个Executor进程的CPU core数量有直接关系的。一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个task,都是以每个task一条线程的方式,多线程并发运行的。如果CPU core数量比较充足,而且分配到的task数量比较合理,那么通常来说,可以比较快速和高效地执行完这些task线程。
num-executors/spark.executor.instances
作业启动的executor数量,driver在向yarn申请资源的时候,yarn会分配你设置的executor参数来启动相应的executors
建议:每个spark作业运行一班设置50~100个executor比较合适
executor-memory/spark.executor.memory
每个executor的内存大小,直接决定了spark作业的性能,与oom有直接关联
建议:num-executor*executor-memory不能超过队列的最大内存量,尽量不要超过队列的三分之一或者一半
executor-cores/spark.executor.cores
每个executor的cpu core的数量,这个参数决定了每个executor并行执行task的能力,