如何在spark中测量算法的运行时间,尤其是在群集上?我感兴趣的是测量从提交火花作业到集群的时间到提交的作业完成的时间。
如果它很重要,我主要对使用数据帧的机器学习算法感兴趣。
答案 0 :(得分:1)
根据我的经验,合理的方法是衡量从提交工作到完成驾驶员的时间。这可以通过使用时间戳:
包围spark action 来实现 val myRdd = sc.textFile("hdfs://foo/bar/..")
val startt = System.currentTimeMillis
val cnt = myRdd.count() // Or any other "action" such as take(), save(), etc
val elapsed = System.currentTimeMillis - startt
请注意,初始sc.textFile()
lazy - 即它不会导致spark驱动程序将作业提交到群集。因此,如果你把它包括在时间中,那就不重要了。
对结果的考虑:由于火花调度程序和群集上的现有负载,上述方法容易出现差异。更精确的方法包括编写
的火花工作System.currentTimeMillis
在其处理开始时,在其闭包内(在工作节点上执行)到累加器。这将从计算中消除调度延迟。
答案 1 :(得分:0)
要计算算法的运行时间,请按照以下步骤进行操作 -
建立单/多节点集群
创建一个文件夹并将算法保存在该文件夹中(例如:myalgo.scala / java / pyhton)
3.使用sbt构建它(您可以按照此链接构建您的程序。https://www.youtube.com/watch?v=1BeTWT8ADfE)
4.运行此命令:SPARK_HOME $ / bin / spark-submit --class" class name" --master" spark master URL" "目标jar文件路径" "参数如果有的话#34;
例如 - spark-submit --class" GroupByTest" --master spark:// BD:7077 /home/negi/sparksample/target/scala-2.11/spark-sample_2.11-1.0.jar
在此之后,刷新您的Web UI(例如localhost:8080),您将获得有关已执行程序的所有信息,包括运行时。