几个基础概念
RDD分区:Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区(partitions),这些分区被分发到集群中的不同节点上进行计算。每个分区对应需要启动一个task去执行该分区的数据计算。
Executor:是spark任务(task)的执行单元
executor下的cores:顾名思义这个参数是用来指定executor的cpu内核个数,分配更多的内核意味着executor并发能力越强,能够同时执行更多的task。
下面是一个具体的case
分区数:表示同一个RDD切成了多少份。该任务通过spark.sql.shuffle.partitions设置了3000个分区数,3000个分区对应着需要启动3000个task去执行。
该任务共产生了102个Executor;(可以通过spark.dynamicAllocation.maxExecutors 和 spark.dynamicAllocation.minExecutors 来控制 )
每个Executor下分了4个core,同一个Executor下的core共享计算和内存资源(spark.executor.cores 设置 core 数量,他们共享spark.executor.memo