web-dev-qa-db-ja.com

Sparkでのクエリの実行時間を測定する方法

Apache spark(Bluemix)でのクエリの実行時間を測定する必要があります。

import time

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

いい方法ですか?テーブルを見るときと比べて、私が得る時間は小さすぎます。

9
Yakov

pdate:いいえ、timeパッケージを使用することは、Sparkジョブの実行時間を測定する最良の方法ではありません。私が知る最も便利で正確な方法Spark履歴サーバーを使用することです。

Bluemixでは、ノートブックの右側にある「Paelette」に移動します。 「環境」パネルを選択すると、Spark History Serverへのリンクが表示され、計算時間を含む実行されたSparkジョブを調査できます。

5
Sven Hafeneger

コマンドラインでこれを行うには、spark.time()を使用できます。

私の別の応答を参照してください: https://stackoverflow.com/a/50289329/3397114

df = sqlContext.sql(query) spark.time(df.show())

出力は次のようになります。

+----+----+ |col1|col2| +----+----+ |val1|val2| +----+----+ Time taken: xxx ms

https://db-blog.web.cern.ch/blog/luca-canali/2017-03-measuring-Apache-spark-workload-metrics-performance-troubleshooting

10
Tyrone321

私が使う 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()
}
9
shridharama

SPARK自体は、Sparkジョブの各段階に関する詳細な情報を提供します。

http:// IP-MasterNode:404 で実行中のジョブを表示できます。または、後でジョブを分析するために履歴サーバーを有効にすることができます。

履歴サーバーの詳細については こちら を参照してください。

3
Sumit