【问题标题】:Total number of jobs in a Spark AppSpark 应用程序中的作业总数
【发布时间】:2016-03-03 12:14:50
【问题描述】:

我已经看到这个问题How to implement custom job listener/tracker in Spark? 并检查了源代码以了解如何获取每个作业的阶段数,但是有没有办法以编程方式跟踪在 Spark 应用程序中完成的作业的百分比?

我可能可以通过侦听器获得已完成作业的数量,但我错过了将要运行的作业总数。

我想跟踪整个应用的进度,它创造了很多工作,但我在任何地方都找不到。

@Edit:我知道有一个 REST 端点可以获取应用程序中的所有作业,但是:

  1. 我不希望使用 REST,而是在应用程序本身中获取它(在 AWS EMR/Yarn 上运行的 Spark - 获取地址可能是可行的,但我宁愿不这样做)
  2. REST 端点似乎只返回正在运行/已完成/失败的作业,而不是作业总数。

【问题讨论】:

  • 您在 UI 中拥有它:master-host:4040
  • @AvihooMamka 我需要以某种方式以编程方式获取它,我的用户无权访问该 UI,因此我需要在我的应用中显示该进度
  • 对,我知道 REST API,但由于我使用 YARN 将它部署在 AWS EMR 上,因此获取 URL 很痛苦,我更愿意在我的 spark 工作中执行此操作并 ping 我的应用程序。试图找到 Sparks Web Server 代码以查看他们如何获得作业列表 :-)

标签: scala apache-spark


【解决方案1】:

稍微浏览一下源代码后,我想没有办法预先知道会有多少作业,因为我找不到 Spark 可以预先进行此类分析的任何地方(因为作业是在每个操作中独立提交的) Spark 并没有从一开始就全面了解所有工作)。

由于 Spark 将工作划分为:

  • jobs - 只要在驱动程序节点上运行的代码遇到 action(即collect()take() 等)就会启动,并且应该计算一个值并返回给司机
  • stages - 由 tasks 序列组成,它们之间不需要数据混洗
  • 任务 - 可以在工作节点上并行运行的相同类型的计算

因此,我们确实需要预先了解单个作业的阶段和任务以创建 DAG,但我们不一定需要创建作业的 DAG,我们可以“随时”创建它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2021-11-17
    • 1970-01-01
    • 2018-09-14
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多