如何在Spark上测量查询的执行时间

时间:2016-01-06 09:11:47

标签: sql time apache-spark ibm-cloud

我需要测量Apache spark(Bluemix)上查询的执行时间。 我尝试了什么:

import time

startTimeQuery = time.clock()
df = sqlContext.sql(query)
df.show()
endTimeQuery = time.clock()
runTimeQuery = endTimeQuery - startTimeQuery

这是一个好方法吗?相对于看到桌子的时候,我得到的时间看起来太小了。

4 个答案:

答案 0 :(得分:9)

我使用System.nanoTime包裹辅助函数,就像这样 -

def time[A](f: => A) = {
  val s = System.nanoTime
  val ret = f
  println("time: "+(System.nanoTime-s)/1e6+"ms")
  ret
}

time {
  df = sqlContext.sql(query)
  df.show()
}

答案 1 :(得分:5)

<强>更新 不,使用time包不是衡量Spark作业执行时间的最佳方法。我所知道的最方便和最准确的方法是使用Spark History Server。

在Bluemix上,在你的笔记本中去了#34; Paelette&#34;在右侧。选择&#34;环境&#34;面板,您将看到Spark History Server的链接,您可以在其中调查已执行的Spark作业,包括计算时间。

答案 2 :(得分:3)

SPARK本身提供了有关Spark Job每个阶段的详细信息。

您可以在http://IP-MasterNode:4040上查看正在运行的作业,也可以启用历史记录服务器以便稍后分析作业。

有关历史记录服务器的详细信息,请参阅here

答案 3 :(得分:0)

对于那些正在寻找/需要python版本的人
(因为pyspark google搜索导致该帖子):

from time import time
from datetime import timedelta

class T():
    def __enter__(self):
        self.start = time()
    def __exit__(self, type, value, traceback):
        self.end = time()
        elapsed = self.end - self.start
        print(str(timedelta(seconds=elapsed)))

用法:

with T():
    //spark code goes here

受启发: https://blog.usejournal.com/how-to-create-your-own-timing-context-manager-in-python-a0e944b48cf8

在使用控制台或连笔记本时证明是有用的 (jupyter魔术%% time和%timeit限于单元格范围,当您在笔记本上下文中共享对象时,这很不方便)