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

Spark 2.3.1 on YARN : how to monitor stages progress programatically?

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

我的第一个想法是解析 YARN GUI 的 HTML 输出。然而,这种 GUI 的问题是,与 spark 作业关联的进度条不会定期更新,甚至大部分时间都不会更改:当作业开始时,百分比大约是 10%,并且卡住了到这个值,直到工作完成。所以这样的 YARN 进度条与 Spark Jobs 无关。

当我单击对应于 Spark 作业的 Application Master link 时,我被重定向到作业期间临时绑定的 Spark GUI 运行。阶段页面与 Spark 作业的进度非常相关。然而它是普通的HTML,所以解析起来很痛苦。在 Spark 文档中,他们讨论了 JSON API,但似乎我无法访问它,因为我在 YARN 下并且我正在通过 YARN 代理页面访问 Spark GUI。

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

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

您可以通过 REST API

为您提交的 spark on yarn 作业检索 YARN 应用程序状态和其他详细信息

参考以下链接:

https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/WebServicesIntro.html#Example_usage

https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Application_API

从应用程序内部,您可以使用 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

无法知道进度的百分比,因为您可以拥有任意数量的 Spark 阶段。但是,Spark History Server 有一个 REST API - Monitoring and Instrumentation,您可以用它来请求 stages/tasks/jobs 信息。假设您的应用程序具有预定义的阶段数量 - 您可以计算进度。