问题描述
我运行一个Spark Job并尝试更快地对其进行调整。总的正常运行时间是1.1个小时,这很奇怪,但是我将所有工作时间加起来。仅需25分钟。 我很好奇为什么Spark UI中的总正常运行时间不等于所有工作时间的总和?
这是Spark UI信息。总正常运行时间为1.1小时。
但是所有工作时间的总和约为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