我有一个在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的相关阶段进度的首选方法吗? ?
答案 0 :(得分:1)
您可以通过REST API检索纱线作业中提交的YARN应用程序状态和其他详细信息
请参阅以下链接:
答案 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询问阶段/任务/职位信息。假设您的应用程序具有预定义的阶段数-您可以计算进度。