为什么Spark UI中的总正常运行时间不等于所有作业持续时间的总和

问题描述

我运行一个Spark Job并尝试更快地对其进行调整。总的正常运行时间是1.1个小时,这很奇怪,但是我将所有工作时间加起来。仅需25分钟。 我很好奇为什么Spark UI中的总正常运行时间不等于所有工作时间的总和?

这是Spark UI信息。总正常运行时间为1.1小时。

Total Up Time

但是所有工作时间的总和约为25分钟 All job's duration

非常感谢您

解决方法

Total uptime是Spark应用程序或驱动程序启动以来的时间。 Jobs durations是处理RDDs/DataFrames上的任务所花费的时间。

由驱动程序执行的所有语句都会影响总的正常运行时间,但不一定会影响工作持续时间。例如:

val rdd: RDD[String] = ???
(0 to 100).foreach(println)  // contribute in total uptime not in job duration
Thread.sleep(10000)          // contribute in total uptime not in job duration
rdd.count                    // contribute in total uptime as well as in job duration

另一个示例是spark-redshift连接器的工作方式。从redshift读取或写入数据时,每次查询(DAG)执行都会发出一条COPY / UNLOAD命令,以将数据写入s3。

在此操作期间,执行者没有做任何工作,并且驱动程序被阻塞,直到完成向s3的数据传输为止。这段时间将增加总的正常运行时间,但不会显示在Job duration中。对DataFrame(现在可以从s3内部读取文件)的进一步操作将添加到Job duration