我正在AWS EMR上运行一个Spark步骤,这一步是通过Boto3添加到EMR中的,我想向用户返回一个完成任务的百分比,无论如何都要这样做吗?
我正在考虑使用Spark完成阶段的数量计算这个百分比,我知道这不会太精确,因为第4阶段可能比第5阶段花费两倍的时间,但我很好。
是否可以使用boto3访问此信息?
我检查了方法<meta
(here是文档),但在响应中我只是在没有其他信息的情况下运行。
答案 0 :(得分:2)
免责声明:我对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访问。
答案 1 :(得分:0)
此刻不支持,我认为不会很快。
您只需按照老式的方式关注应用程序日志。因此,可以考虑以您知道实际完成的方式格式化日志。