Apache Spark - 为什么要删除执行程序?“空闲”是什么意思?

Lor*_*lli 6 apache-spark

使用动态资源分配

当执行程序空闲超过 spark.dynamicAllocation.executorIdleTimeout 秒时,Spark 应用程序会删除执行程序。

当我按如下方式设置执行程序空闲超时属性时spark.dynamicAllocation.executorIdleTimeout= 300,它会抛出以下警告

spark.ExecutorAllocationManager: Removing executor 0 because it has been idle for 300 seconds (new desired total will be 2)
Run Code Online (Sandbox Code Playgroud)

“空闲”是什么意思?这是否意味着工人不使用 CPU?对数据库的阻塞调用算作空闲吗?

eli*_*sah 5

“空闲”是什么意思?

要回答这个问题,我想回到官方文档。因此,就像您引用的文档中提到的那样,动态分配机制使 Spark 能够根据工作负载动态调整应用程序占用的资源。

这意味着您的应用程序可能:

  • 稍后在需要时再次请求它们。

  • 如果不再使用资源,则将资源还给集群:执行程序状态被视为idle,这是指定它坐在那里什么也不做(并保留资源)的术语,即:在您的情况下,它生成了以下警告

    spark.ExecutorAllocationManager: Removing executor 0 because it has been idle for 300 seconds (new desired total will be 2)
    
    Run Code Online (Sandbox Code Playgroud)

这是否意味着工人不使用 CPU?

执行程序保留 CPU 和内存。如果其他应用程序需要使用它们,那么它是保留的。您的资源管理器无法为您的其他应用程序分配资源。因此,在多个应用程序共享同一个集群的情况下,释放它们可以是多产的。

对数据库的阻塞调用算作空闲吗?

对数据库的调用通常需要资源,因此,执行器在执行任何类型的任务(甚至是这个任务)时都不会空闲。

要了解有关 的更多信息ExecutorAllocationManager,我建议您在此处查看它的代码 。