Sparklens是一个内置 Spark 调度器模拟器的 Spark 分析工具:它可以更容易地理解 Spark 应用程序的可扩展性限制。它有助于了解给定的 Spark 应用程序使用提供给它的计算资源的效率如何。它已在Qubole实施并维护。它是开源的(Apache 许可证 2.0)并已在 Scala 中实现。
Sparklens 的一个有趣特性是它能够通过单次运行 Spark 应用程序生成估计值. 它报告信息,例如估计完成时间和估计的集群利用率与不同数量的执行程序,一个作业/阶段时间线,显示如何在作业中安排并行阶段,以及许多有趣的每个阶段指标。
Sparklens使用方法有四种使用 Sparklens 的方法:
- 实时模式
- 离线模式
- 在事件历史文件上运行
- 笔记本
下面说下实时和离线模式
实时模式Sparklens 可以使用以下选项在应用程序执行时运行(对于 spark-submit 和 spark-shell):
--packages qubole:sparklens:0.2.1-s_2.11 --conf spark.extraListeners=com.qubole.sparklens.QuboleJobListener
或通过编程方式将Sparklens依赖项添加到Java / Scala项目中(这是Maven的示例):
... qubole-maven-repo Qubole Maven Repo http://dl.bintray.com/spark-packages/maven/ central Maven Repository Switchboard default http://repo1.maven.org/maven2 false qubole sparklens0.2.1-s_2.11
或如下(对于Spark 2.x)
SparkSession spark = SparkSession
.builder()
.appName("Spark app name")
.master(master)
.config("spark.extraListeners", "com.qubole.sparklens.QuboleJobListener")
.getOrCreate();
离线模式
Sparklens 可以稍后运行,不一定在执行时运行。这可以通过将以下属性添加到 Spark 应用程序配置来设置:
conf.set("spark.sparklens.reporting.disabled", "true");
在 Spark 应用程序执行结束时,只会生成一个 JSON 数据文件。默认保存目录是 /tmp/sparklens,但可以通过以下配置属性更改目的地:
conf.set("spark.sparklens.data.dir", "/home/guglielmo/sparklens");
然后可以使用该文件通过
spark-submit命令独立运行 Sparklens ,如下所示:
$SPARK_HOME/bin/spark-submit --packages qubole:sparklens:0.2.1-s_2.11 --class com.qubole.sparklens.app.ReporterApp qubole-dummy-arg
上面的命令从JSON数据文件开始,生成的报告具有与实时模式下生成的布局相同且包含相同结果的报告。
最终报告中提供的信息:效率统计(驱动程序与执行程序时间、关键和理想应用程序时间、驱动程序和执行程序浪费的核心计算时间)。
预测挂钟时间和不同执行器数量的集群利用率。
每个阶段的指标。
随着时间的推移,可用的执行者和需要的执行者。
基于任务的聚合指标。
参考文章:https://www.javacodegeeks.com/2019/02/sparklens-tool-spark-applications-optimization.html



