apache Spark 中 executorRunTime 和 executorCpuTime 之间的主要区别是什么?executorRunTime 是否包括 executorCpuTime

Ram*_*san 5 apache-spark

apache Spark中executorRunTimeexecutorCpuTime之间的主要区别是什么?executorRunTime 也包括 executorCpuTime 吗?

小智 2

差异似乎可以归结为用于测量任务开始和结束时间的计时器实现(这是整个作业的执行程序或 CPU 运行时指标的总和),并且它们的计算方式看起来非常一致,请参见下文。

在更高的层面上,CPU Time 更直接地衡量任务实际执行所花费的时间,因为它不包括在其他线程中花费的时间,而执行程序时间只会计算任务计算时经过的所有时间,包括花费的时间在其他线程中。因此,CPU 运行时间可能会减少。

查看executor.scala中如何设置和使用完成时间(开始时间的设置类似):

val taskFinishNs = System.nanoTime()
val taskFinishCpu = if (threadMXBean.isCurrentThreadCpuTimeSupported) {
   threadMXBean.getCurrentThreadCpuTime
} else 0L

// ... other code omitted for brevity ...

task.metrics.setExecutorRunTime(
  (taskFinish - taskStart) - task.executorDeserializeTime
)
task.metrics.setExecutorCpuTime(
  (taskFinishCpu - taskStartCpu) - task.executorDeserializeCpuTime
) 
Run Code Online (Sandbox Code Playgroud)

来源: https: //github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L533-L556