【问题标题】:How to change job/stage description in web UI?如何在 Web UI 中更改工作/阶段描述?
【发布时间】:2020-06-30 16:19:13
【问题描述】:

当我在 Apache Spark 上运行作业时,Web UI 会提供类似于以下的视图:

虽然这对我作为开发人员查看事物在哪里非常有用,但我认为阶段描述中的行号对我的支持团队来说并没有那么有用。为了让他们的工作更轻松,我希望能够为我工作的每个阶段以及工作本身提供一个定制名称,如下所示:

这可以在 Spark 中完成吗?如果是这样,我该怎么做?

【问题讨论】:

  • 不幸的是,这对给定工作的每个阶段都给出了相同的描述。我希望能够给不同的阶段起不同的名称。
  • 也许我误解了一些东西,但是设置阶段描述的能力对 Web UI 的用户来说不是很重要吗?依赖操作名称的默认值 - “map”、“forEachPartition”等如果没有对代码库有很好的了解,几乎没有用处。也许我做错了 Spark?
  • 我认为作业、阶段、任务的概念是相当低级的,Spark 开发人员在他们熟悉代码库之后就会知道它们(他们通常是自己开发的)。因此,他们知道mapforeachPartition 等在代码中的位置,但不一定知道它们如何转化为工作、阶段和任务。

标签: apache-spark


【解决方案1】:

这就是 Spark Core 非常罕见的特性之一,即 本地属性 非常适用的地方。

Spark SQL 使用它将不同的 Spark 作业分组到单个结构化查询下,以便您可以使用 SQL 选项卡并轻松导航。

您可以使用SparkContext.setLocalProperty控制本地属性:

设置影响从该线程提交的作业的本地属性,例如 Spark 公平调度程序池。用户定义的属性也可以在这里设置。这些属性会传播到工作任务,并且可以通过 org.apache.spark.TaskContext#getLocalProperty 在那里访问。

Web UI 使用两个本地属性:

  • callSite.short 在“工作”选项卡中(这正是您想要的)
  • callSite.long 在职位详情页面中。

示例用法

scala> sc.setLocalProperty("callSite.short", "callSite.short")

scala> sc.setLocalProperty("callSite.long", "this is callSite.long")

scala> sc.parallelize(0 to 9).count
res2: Long = 10

以及网页界面中的结果。

点击一个职位以查看详细信息,您可以在其中找到更长的呼叫站点,即callSite.long

这里是阶段标签。

【讨论】:

  • 因为我正在运行一个需要多个阶段的作业,所以我需要对每个阶段进行不同的描述。这个答案在每个阶段都有相同的描述,这实际上是从我想去的地方退了一步。
  • 感谢您的回答。我认为每个阶段不可能有不同的名称,因为它们不一定能很好地映射到您的业务阶段,而且因为您无法访问任何阶段。不过,您可以影响他们的人数。
  • 是的,我已经得出了这个结论,并且还认为在工作层面上得到它对我们来说已经足够了。
  • 将属性重置为默认值 sc.setLocalProperty("callSite.short",null)
  • 对于 Spark 2.3.1,此属性称为 spark.job.description。通过深入研究源代码找到。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2010-10-15
    • 2018-06-08
    • 2019-11-11
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多