Spark作业间Executor迁移开销疑问及概念澄清请求
关于Spark作业调度论文的概念澄清
核心概念区分:Spark Application vs Job
- Application:用户提交的完整Spark程序,包含Driver进程和多个Executor进程,生命周期从程序启动到结束。
- Job:由一次Action操作(如
count()、saveAsParquet())触发的任务执行流,一个Application可包含多个Job。
对论文内容的纠正与疑惑解答
论文的概念混淆点
论文中“Executor默认绑定作业至完成”的描述是错误的:Executor本质是绑定Application的,而非单个Job。一个Application启动后申请的Executor会持续服务于该App内的所有Job,直到Application终止才会被销毁。单应用内作业间不存在Executor迁移开销
单Application内的多个Job共享已分配的Executor资源:当一个Job执行完成后,Executor的JVM不会销毁,其内部的线程池会直接复用给下一个Job的任务执行。因此,单应用内作业切换完全不存在JVM销毁/启动的开销,论文中“作业间迁移Executor会产生开销”的说法属于概念误用——这种开销仅存在于跨Application的Executor动态分配场景(集群将Executor从一个App回收后分配给另一个App),但这和论文声明的“单应用内作业调度”研究范围无关。官方文档未提及该开销的原因
Spark官方《Job Scheduling》《Tuning Spark》文档聚焦的是正确的调度逻辑:单应用内作业共享Executor资源是默认行为,不存在所谓的迁移开销,因此无需提及错误场景下的内容。
内容的提问来源于stack exchange,提问作者Archie Gertsman
相关产品推荐
相关产品推荐

