提问人:YAKOVM 提问时间:1/6/2016 最后编辑:William 'Bill' WentworthYAKOVM 更新时间:4/4/2022 访问量:52366
如何在 Spark 上测量查询的执行时间
How to measure the execution time of a query on Spark
问:
我需要测量 Apache spark (Bluemix) 上查询的执行时间。 我尝试过:
import time
startTimeQuery = time.clock()
df = sqlContext.sql(query)
df.show()
endTimeQuery = time.clock()
runTimeQuery = endTimeQuery - startTimeQuery
这是个好办法吗?相对于我看到表格的时间,我得到的时间看起来太小了。
答:
SPARK 本身提供了有关 Spark 作业每个阶段的大量详细信息。
您可以在 http://IP-MasterNode:4040 上查看正在运行的作业,也可以启用历史记录服务器以在以后分析作业。
有关历史记录服务器的更多信息,请参阅此处。
评论
更新:否,使用包不是衡量 Spark 作业执行时间的最佳方法。据我所知,最方便、最准确的方法是使用 Spark History Server。time
在 Bluemix 上,在笔记本中转到右侧的 “Paelette”。选择“环境”面板,你将看到一个指向 Spark History Server 的链接,您可以在其中调查已执行的 Spark 作业,包括计算时间。
评论
time
我使用包裹的辅助函数,如下所示 -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()
}
要在 spark-shell (Scala) 中执行此操作,可以使用 .spark.time()
看到我的另一个回复:https://stackoverflow.com/a/50289329/3397114
df = sqlContext.sql(query)
spark.time(df.show())
输出将为:
+----+----+
|col1|col2|
+----+----+
|val1|val2|
+----+----+
Time taken: xxx ms
相关:关于测量 Apache Spark 工作负载指标以进行性能故障排除。
评论
time()
对于那些寻找/需要 python 版本
的人(因为 pyspark 谷歌搜索会导致这篇文章):
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 magic %%time 和 %timeit 仅限于单元格范围,这在跨笔记本上下文共享对象时很不方便)
如果您使用的是 spark-shell (scala),则可以使用以下模块:time
import time
df = sqlContext.sql(query)
spark.time(df.show())
但是,在 中不可用。对于 ,一个简单的解决方案是使用:SparkSession.time()
pyspark
python
time
import time
start_time = time.time()
df.show()
print(f"Execution time: {time.time() - start_time}")
还可以尝试使用 sparkMeasure,它简化了性能指标的收集
评论