【问题标题】:How to show Spark application's percentage of completion on AWS EMR (and Boto3)?如何在 AWS EMR(和 Boto3)上显示 Spark 应用程序的完成百分比?
【发布时间】:2017-06-05 20:24:27
【问题描述】:

我在AWS EMR上运行一个Spark step,这个step是通过Boto3添加到EMR中的,我想把任务完成的百分比返回给用户,请问有什么办法吗?

我想用 Spark 完成的阶段数来计算这个百分比,我知道这不会太精确,因为第 4 阶段可能需要比第 5 阶段花费两倍的时间,但我可以接受。

是否可以使用 boto3 访问这些信息?

我检查了list_steps 方法(here 是文档),但只有在没有其他信息的情况下运行时,我才会得到响应。

【问题讨论】:

    标签: python apache-spark pyspark amazon-emr


    【解决方案1】:

    免责声明:我对 AWS EMR 和 Boto3 一无所知

    我想将任务完成的百分比返回给用户,有什么办法吗?

    有什么办法吗?也许吧。只需注册一个SparkListener 并在事件发生时拦截它们。这就是 Web UI 在幕后工作的方式(这是 Spark 应用程序的权威来源)。

    使用spark.extraListeners 属性注册SparkListener 并对事件做任何你想做的事情。

    引用官方文档的Application Properties

    spark.extraListeners 实现SparkListener 的类的逗号分隔列表;在初始化SparkContext 时,这些类的实例将被创建并注册到 Spark 的侦听器总线。如果一个类有一个接受SparkConf 的单参数构造函数,则将调用该构造函数;否则,将调用零参数构造函数。

    你也可以考虑REST API接口:

    除了在 UI 中查看指标外,它们还以 JSON 形式提供。这为开发人员提供了一种为 Spark 创建新的可视化和监控工具的简单方法。 JSON 可用于正在运行的应用程序和历史服务器中。端点安装在 /api/v1。例如,对于历史服务器,它们通常可以通过 http://:18080/api/v1 访问,而对于正在运行的应用程序,它们可以通过 http://localhost:4040/api/v1 访问。

    【讨论】:

    • 这是一个非常好的方法,但我认为如果你想为此使用 boto3,开发中会有开销。 AWS API 对这类操作不太友好。无论如何,你得到我的投票!
    【解决方案2】:

    目前不支持此功能,我认为不会很快支持。

    您只需要以老式方式跟踪应用程序日志。因此,也许可以考虑以您知道实际完成的方式格式化您的日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多