分析Scala Spark应用程序

svK*_*ris 9 scala apache-spark

我想介绍一下我的sSpark scala应用程序,以找出我必须优化的代码部分.我启用了-Xprof,--driver-java-options但这对我没什么帮助,因为它提供了很多详细的细节.我只是想知道我的应用程序中每个函数调用花费多少时间.和其他Stack Overflow问题一样,许多人建议使用YourKit,但它并不便宜.所以我想使用一些实际上没有成本的东西.

有没有更好的方法来解决这个问题?

hve*_*iga 8

我建议你直接使用spark提供的UI.它提供了大量有关时间,步骤,网络使用等的信息和指标......

您可以在此处查看更多相关信息:https://spark.apache.org/docs/latest/monitoring.html

此外,在新的Spark版本(1.4.0)中,有一个很好的可视化工具来理解你的火花作业的步骤和阶段.


小智 5

如您所说,对分布式进程进行概要分析比对单个JVM进程进行概要分析更为棘手,但是有一些方法可以实现这一点。

您可以将采样用作线程分析方法。将Java代理添加到将捕获堆栈跟踪的执行程序,然后对这些堆栈跟踪进行汇总,以查看应用程序花费最多时间的方法。

例如,您可以使用Etsy的statsd-jvm-profiler Java代理并将其配置为将堆栈跟踪发送到InfluxDB,然后使用Flame Graphs对其进行汇总。

有关更多信息,请查看我的关于Spark应用程序性能分析的文章:https : //www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/


Mic*_*tor 5

我最近写了一篇文章和一个脚本,包装了spark-submit,并在执行Spark应用程序后生成了火焰图。

这是文章:https : //www.linkedin.com/pulse/profiling-spark-applications-one-click-michael-spector

这是脚本:https : //raw.githubusercontent.com/spektom/spark-flamegraph/master/spark-submit-flamegraph

只需使用它而不是常规的spark-submit