Spark中--executor-core对应逻辑核还是物理核?并行执行层面疑问
Spark超线程与任务并行的实际逻辑
直白结论
- Spark根本不管你是物理核心还是逻辑处理器(超线程),它只认操作系统暴露的逻辑CPU数量。
- 你设置的
--executor-cores=3,本质是给每个Executor分配3个逻辑CPU核心,而非物理核心。
你的场景拆解
你的机器有16个物理核心(每个带2个超线程,总共32个逻辑CPU),设置--num-executors=2、--executor-cores=3后:
- 每个Executor会获得3个逻辑CPU的调度权限,至于这3个逻辑CPU是来自同一物理核心的超线程,还是不同物理核心,完全由操作系统调度决定,Spark不干预。
- 你之前算的
2*3=6是混淆了物理核心的超线程数和Spark的任务并行逻辑——Spark每个Executor的并行任务数默认等于executor-cores的数值,也就是3个,不是6个。 - 关于“是否在核心内创建线程利用超线程”:Spark的任务本身就是线程,这些线程会被操作系统分配到空闲的逻辑处理器上,包括同一物理核心的两个超线程,本质是操作系统在利用超线程,Spark只是提交任务线程而已。
额外提示
要是想把超线程的性能用满,直接把--executor-cores设得接近逻辑CPU总数就行(别把系统资源占光),操作系统会自动把任务分到超线程上,不用给Spark加特殊配置。
内容的提问来源于stack exchange,提问作者nayak0765
相关产品推荐
相关产品推荐

