Spark实时进度查询
大家好,我是一拳就能打爆帕特农神庙柱子的猛男
相信大家都有需求要查询Spark程序执行的进度,所以今天给大家带来Spark实时进度查询的方式整理。我在Spark官网找到了关于Spark监控的相关介绍,Spark指标监控有几种方法:web UI,REST API
1、 web UI
当SparkContext执行的时候,在浏览器中访问服务器IP:4040就可以进入UI界面:
其中可以访问到的内容有:
- 一系列的task和scheduler stage
- RDD的size和memory usage的总结
- 环境信息
- 在运行的excutor的信息
在默认情况下,这种方式只允许在Spark运行期间访问,若要事后查看需要在执行程序之前将 spark.eventLog.enabled 设置为true。在官网关于这部分的内容还介绍了许多参数对应的作用。
2、Rest API
除了通过Web的方式去访问指标,还可以通过Rest Api的方式去访问,返回的Json格式字符串更适合自定义可视化监控。要访问历史数据的话需要访问 http://< server-url >:18080/api/v1 ,若访问正在运行的程序则访问 http://localhost:4040/api/v1。
在Rest Api模式下访问,应用程序被它的ID(app-id)引用。在Yarn中部署集群时应用被标记为attempt-id。
例如,运行一个kmeans聚类的案例后,spark会自动生成app-id,通过sc.applicationId可以获取app-id,从而构造URL访问需要的资源:
println(sc.applicationId)
也可以通过访问 http://localhost:4040/api/v1/applications 获取id:
[ {
"id" : "local-1614322919314",
"name" : "Kmeans2PMML",
"attempts" : [ {
"startTime" : "2021-02-26T07:01:56.076GMT",
"endTime" : "1969-12-31T23:59:59.999GMT",
"lastUpdated" : "2021-02-26T07:01:56.076GMT",
"duration" : 0,
"sparkUser" : "dell",
"completed" : false,
"appSparkVersion" : "3.0.1",
"lastUpdatedEpoch" : 1614322916076,
"startTimeEpoch" : 1614322916076,
"endTimeEpoch" : -1
} ]
} ]
访问 http://localhost:4040/api/v1/applications/local-1614322919314/jobs ,返回包含指定信息的字符串:
[ {
"jobId" : 7,
"name" : "collectAsMap at KMeans.scala:297",
"submissionTime" : "2021-02-26T07:02:02.939GMT",
"completionTime" : "2021-02-26T07:02:03.021GMT",
"stageIds" : [ 9, 8 ],
"status" : "SUCCEEDED",
"numTasks" : 4,
"numActiveTasks" : 0,
"numCompletedTasks" : 4,
"numSkippedTasks" : 0,
"numFailedTasks" : 0,
"numKilledTasks" : 0,
"numCompletedIndices" : 4,
"numActiveStages" : 0,
"numCompletedStages" : 2,
"numSkippedStages" : 0,
"numFailedStages" : 0,
"killedTasksSummary" : { }
}, ..... ]
根据官网关于Rest Api的参数表可以了解不同参数可以得到的信息,下面是访问stages得到的信息:
在Rest Api的参数表中有全部的查询方式,总结下来可以得到的信息与Web UI差不多,包括: applications、 jobs、stages、executors、storage、logs 、streaming 、 environment 、 version 这几方面的信息。
在Executor Task Metrics还有关于Task参数的介绍,这些参数可以用于故障排除和查看工作负载。在Executor Metrics中还有Executor粒度的一些参数。
通过这些参数应该是可以查询实时进度的,如果以stage为进度分割的话只需要查看每个stage是否完成即可,就像Web UI中显示的一样:
总结
其实Spark实时进度查询的支持还是很友好的,对于做测试的同学可以使用Web UI界面来查看各项指标,相信这个方式大家都了解过。对于希望做炫酷可视化的同学或者公司有DIY可视化需求的同学可以调用现成的URL来访问。
时进度查询的支持还是很友好的,对于做测试的同学可以使用Web UI界面来查看各项指标,相信这个方式大家都了解过。对于希望做炫酷可视化的同学或者公司有DIY可视化需求的同学可以调用现成的URL来访问。