我在AWS EMR上运行一个Spark步骤,此步骤已通过Boto3添加到EMR,我想向用户返回完成任务的百分比,是否可以这样做?
我当时想用Spark的已完成阶段数来计算此百分比,我知道这不太精确,因为阶段4可能比阶段5花费两倍的时间,但我对此表示满意。
是否可以通过boto3访问此信息?
我检查了方法list_steps
(here是文档),但是在响应中,我仅在其运行时没有其他信息的情况下得到。
最佳答案
免责声明:我对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上访问它们。