【问题标题】:Spark 2.3.1 on YARN : how to monitor stages progress programatically?YARN 上的 Spark 2.3.1:如何以编程方式监控阶段进度?
【发布时间】:2019-01-30 04:39:34
【问题描述】:

我有一个在 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 作业的相关阶段进度的首选方法是什么?

【问题讨论】:

  • YARN 基本上是批处理作业的资源管理器,在高层次上,批处理作业没有“进度”——要么正在运行,要么成功,要么完全失败。任何中间故障都可能触发倒带/重新启动。另一方面,如果您想要实时流式传输正在发生的事情来娱乐您的朋友和家人......您可以设置一个 Flume 实例,并为 Log4J 配置一个 Flume 插件,以便您的 Spark 日志在某处流式传输。然后由你来处理那个流。
  • 我有一个几乎没有中间故障的轻型管道,所以我绝对不会只为朋友和家人分享你对批处理进度的分析。我还清楚地确定了 Spark GUI 上的特定阶段,这些阶段与向我们的客户展示整体进展非常相关。因此,如果 YARN 级别太高,并且我们不讨论监控批处理进度的相关性,您能否提供有关从 Spark GUI 检索相关进度指标的信息?
  • 您希望在 spark 应用程序中取得进度还是作为外部应用程序?在应用程序本身中,您可以从 SparkSession 中获取这些信息
  • Raphael,我非常喜欢您的两种解决方案。通过外部应用程序获取相关的进度统计信息,知道 Spark GUI 在 YARN 后面。或者通过在我的 Spark 应用程序中从 SparkSession 注册一些事件函数!您能否提供更多关于如何将其作为新的 SO 答案的详细信息?谢谢

标签: scala apache-spark hadoop hadoop-yarn


【解决方案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】:

【讨论】:

  • 谢谢曼苏尔。但是我更喜欢基于 Spark 的解决方案,即使我在 YARN 下运行它。因为 YARN API 与获取 Spark 作业的阶段进度或整体进度无关。
【解决方案3】:

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

【讨论】:

  • 正如 Samson Scharfrichter 所说,是的,我有预定义/可预测的阶段,因此计算进度与我的用例高度相关。所以一个解决方案是从内部通过 statusTracker 计算进度(如 Raphael 所说),但查询 Spark History 的 rest api 也是一个好主意。然而,我更喜欢内部方法,因为 Spark History 不能很好地刷新信息,即使稍微调整一下也是如此。还是谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多