我需要在Apache spark(Bluemix)上测量查询的执行时间.我尝试了什么:
import time startTimeQuery = time.clock() df = sqlContext.sql(query) df.show() endTimeQuery = time.clock() runTimeQuery = endTimeQuery - startTimeQuery
这是一个好方法吗?相对于看到桌子的时候,我得到的时间看起来太小了.
要在命令行中执行此操作,您可以使用spark.time()
.
请参阅我的另一个回复:https://stackoverflow.com/a/50289329/3397114
spark.time()
输出将是:
spark.time()
https://db-blog.web.cern.ch/blog/luca-canali/2017-03-measuring-apache-spark-workload-metrics-performance-troubleshooting
我使用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() }
更新:
不,使用time
包不是衡量Spark作业执行时间的最佳方法。我知道的最方便,最准确的方法是使用Spark History Server。
在Bluemix上,在笔记本中转到右侧的“调色板”。选择“环境”面板,您将看到指向Spark历史记录服务器的链接,您可以在其中调查执行的Spark作业,包括计算时间。