YARN上的Spark 2.3.1:如何以编程方式监视阶段进度?

时间:2018-08-23 18:12:01

标签: scala apache-spark hadoop yarn

我有一个在YARN上运行Spark的设置,我的目标是通过其应用程序ID以编程方式获取Spark作业进度的更新。

我的第一个想法是解析YARN GUI的HTML输出。但是,这种GUI的问题在于,与Spark作业相关联的进度条不会定期更新,甚至大部分时间都不会改变:当作业开始时,百分比大约是10%,并且卡住了直到工作完成为止。因此,此类YARN进度栏与Spark Jobs无关。

当我单击与Spark作业相对应的Application Master链接时,我将重定向到在作业运行期间临时绑定的Spark GUI。阶段页面与Spark作业的进度非常相关。但是,它是纯HTML,因此很难解析。在Spark文档上,他们讨论了JSON API,但是似乎无法访问它,因为我在YARN下,并且正在通过YARN代理页面访问Spark GUI。

可能是一种解决方案,为了能够访问更多东西,可能是访问真正的Spark GUI ip:port,而不是YARN代理的代理,但是我不知道是否可以获得这样的源URL轻松地...

要获得Spark作业进度,所有这些听起来都很复杂...截至2018年,您能告诉我们什么是获得在YARN上运行的Spark Job的相关阶段进度的首选方法吗? ?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

在应用程序内部,您可以使用spark.sparkContext.statusTracker获取有关阶段进度的信息,例如Zeppelin Notebook实现了Spark 2.3的进度条:https://github.com/apache/zeppelin/blob/master/spark/spark-scala-parent/src/main/scala/org/apache/zeppelin/spark/JobProgressUtil.scala

答案 2 :(得分:0)

无法知道百分比进度,因为您可以有任意数量的Spark阶段。但是,有一个用于Spark History Server的REST API-Monitoring and Instrumentation,您可以使用该API询问阶段/任务/职位信息。假设您的应用程序具有预定义的阶段数-您可以计算进度。