Sparklens是带有内置Spark Scheduler模拟器的Spark概要分析工具:它使您更容易理解Spark应用程序的可伸缩性限制。 它有助于了解给定Spark应用程序使用提供给它的计算资源的效率。 它已在Qubole实施并维护。 它是开源的( Apache License 2.0 ),并已在Scala中实现。
Sparklens的一个有趣特征是它具有通过一次运行Spark应用程序生成估计的能力。 它报告信息,例如估计的完成时间和使用不同数量的执行者的估计的群集利用率,作业/阶段时间线,该时间线显示了如何在作业中安排并行阶段以及每阶段有趣的指标。 有四种使用Sparklens的方法:
- 现场模式
- 离线模式
- 在事件历史记录文件上运行
- 笔记本电脑
在这篇文章中,我仅关注实时和离线模式。
现场模式
通过使用以下选项,Sparklens可以在应用程序执行时运行(对于
火花提交和
火花壳 ):
--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
sparklens
0.2.1-s_2.11
然后通过如下配置其侦听器(对于Spark 1.X)
SparkConf conf = new SparkConf();
conf.setMaster(master);
conf.setAppName("Spark app name");
conf.set("spark.extraListeners", "com.qubole.sparklens.QuboleJobListener");
JavaSparkContext jsc = new JavaSparkContext(conf);
或如下(对于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");
然后,该文件可用于通过以下方式独立运行Sparklens:
spark-submit命令如下:
$SPARK_HOME/bin/spark-submit --packages qubole:sparklens:0.2.1-s_2.11 \
--class com.qubole.sparklens.app.ReporterApp qubole-dummy-arg
上面的命令从JSON数据文件开始,生成的报告具有与实时模式下生成的布局相同且包含相同结果的报告。
那个报告
这些是最终报告中可用的信息:
- 效率统计信息(驱动程序与执行程序时间,关键和理想应用时间,驱动程序和执行程序浪费的核心计算时间)。
- 预测的挂钟时间和具有不同执行程序计数的群集利用率。
- 每阶段指标。
- 随着时间的推移,可用的执行器和所需的执行器。
- 基于任务的汇总指标。
结论
我和我的团队最近开始采用此工具,到目前为止,我们发现了解其他团队开发的Spark应用程序的可伸缩性限制确实很有用,但是需要在我们的基础架构中执行。 该工具生成的最终报告提供了一组全面的信息,这些信息绝对有助于指出正确的方向,以发现潜在的可伸缩性问题和需要改进的地方。
生成的报告采用文本格式,其中包含上述所有指标和信息。 Qubole提供了 在线服务 ,可从上传的JSON数据文件开始,生成具有交互式图表和表格的用户友好且优雅的报告。 无论您是组织机构,还是不允许您共享在公司基础结构中运行的Spark应用程序上运行Sparklens生成的JSON数据,都需要保留文本报告。 为了解决此类情况,我正在考虑实现并发布一个开源Java库,以在本地环境中从Sparklens JSON数据文件或文本报告开始生成用户友好的报告。 请通过评论此帖子来注册您对此库的兴趣。 谢谢。
翻译自: https://www.javacodegeeks.com/2019/02/sparklens-tool-spark-applications-optimization.html