我在AWS EMR上运行一个Spark步骤,此步骤已通过Boto3添加到EMR,我想向用户返回完成任务的百分比,是否可以这样做?

我当时想用Spark的已完成阶段数来计算此百分比,我知道这不太精确,因为阶段4可能比阶段5花费两倍的时间,但我对此表示满意。

是否可以通过boto3访问此信息?

我检查了方法list_stepshere是文档),但是在响应中,我仅在其运行时没有其他信息的情况下得到。

最佳答案

免责声明:我对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上访问它们。

10-08 09:28
查看更多