Scala 关于纱线的Spark 2.3.1:如何以编程方式监控各阶段的进度?

Scala 关于纱线的Spark 2.3.1:如何以编程方式监控各阶段的进度?,scala,apache-spark,hadoop,yarn,Scala,Apache Spark,Hadoop,Yarn,我有一个在Thread上运行Spark的设置,我的目标是通过编程方式通过应用程序id获得Spark作业进度的更新 我的第一个想法是解析ThreadGUI的HTML输出。然而,这种GUI的问题在于,与spark作业相关联的进度条不会定期更新,甚至在大多数情况下也不会更改:当作业开始时,百分比大约为10%,并且在作业完成之前一直保持该值。所以这样的进度条与Spark工作无关 当我单击与Spark作业对应的应用程序主链接时,我将重定向到在作业运行期间临时绑定的Spark GUI。“阶段”页面与Spar

我有一个在Thread上运行Spark的设置,我的目标是通过编程方式通过应用程序id获得Spark作业进度的更新

我的第一个想法是解析ThreadGUI的HTML输出。然而,这种GUI的问题在于,与spark作业相关联的进度条不会定期更新,甚至在大多数情况下也不会更改:当作业开始时,百分比大约为10%,并且在作业完成之前一直保持该值。所以这样的进度条与Spark工作无关

当我单击与Spark作业对应的应用程序主链接时,我将重定向到在作业运行期间临时绑定的Spark GUI。“阶段”页面与Spark作业的进度非常相关。然而,它是纯HTML,因此解析起来很麻烦。在Spark文档中,他们谈到了JSON API,但是我似乎无法访问它,因为我在Thread下,并且我正在通过Thread代理页面访问Spark GUI

可能是一个解决方案,为了能够访问更多的东西,可以访问真正的Spark GUI ip:port,而不是纱线代理,但我不知道我是否可以轻松获得这样的源URL


所有这些听起来都很复杂,只是为了获得工作进展。。。从2018年起,您能告诉我们获得纱线上火花作业相关阶段进度的首选方法吗?

您可以通过REST API检索提交的纱线上火花作业的纱线应用状态和其他详细信息

请参阅以下链接:


您可以通过REST API检索提交的spark on Thread作业的纱线应用程序状态和其他详细信息

请参阅以下链接:


在应用程序内部,您可以通过使用
spark.sparkContext.statusTracker
获取舞台进度信息,您可以查看齐柏林飞艇笔记本如何在应用程序内部为spark 2.3实现进度条:

,您可以使用
spark.sparkContext.statusTracker
获取阶段进度信息,您可以查看齐柏林飞艇笔记本如何为spark 2.3实现进度条:

无法知道进度百分比,因为您可以拥有任意数量的spark阶段。但是,Spark History Server有一个REST API,您可以使用它来询问阶段/任务/作业信息。假设你的应用程序有预定义的阶段数量-你可以计算进度。

无法知道进度的百分比,因为你可以有任意数量的Spark阶段。但是,Spark History Server有一个REST API,您可以使用它来询问阶段/任务/作业信息。假设您的应用程序具有预定义的阶段数量,您可以计算进度。

Thread基本上是批处理作业的资源管理器,在较高级别上,批处理作业没有“进度”——要么正在运行,要么已成功,要么已完全失败。任何中间故障都可能触发倒带/重新启动。另一方面,如果你想现场直播正在发生的事情来娱乐你的朋友和家人。。。您可以设置一个Flume实例,并为Log4J配置一个Flume插件,以便您的Spark日志流式传输到某个地方。然后你就可以用这个流来做sthg了。我有一个轻管道,几乎没有中间故障,所以我绝对不会只为朋友和家人分享你关于批处理进度的分析。我还明确指出了Spark GUI上的特定阶段,这些阶段的进度与向客户展示总体进度非常相关。因此,如果YARN的级别太高,并且如果我们没有就监控批处理进度的相关性进行争论,您能否提供有关从Spark GUI检索相关进度指标的信息?您希望在Spark应用程序内或作为外部应用程序来获取进度?在应用程序本身中,您可以从SparkSessionRaphael获得这些信息,我非常喜欢您的两个解决方案。或者通过外部应用程序获取相关的进度统计数据,知道Spark GUI在幕后。或者通过在我的Spark应用程序中的SparkSession注册一些事件函数!作为一个新的SO答案,你能提供更多关于如何做到这一点的细节吗?ThanksYARN基本上是一个用于批处理作业的资源管理器,在较高级别上,批处理作业没有“进度”——要么正在运行,要么已经成功,要么已经完全失败。任何中间故障都可能触发倒带/重新启动。另一方面,如果你想现场直播正在发生的事情来娱乐你的朋友和家人。。。您可以设置一个Flume实例,并为Log4J配置一个Flume插件,以便您的Spark日志流式传输到某个地方。然后你就可以用这个流来做sthg了。我有一个轻管道,几乎没有中间故障,所以我绝对不会只为朋友和家人分享你关于批处理进度的分析。我还明确指出了Spark GUI上的特定阶段,这些阶段的进度与向客户展示总体进度非常相关。因此,如果YARN的级别太高,并且如果我们没有就监控批处理进度的相关性进行争论,您能否提供有关从Spark GUI检索相关进度指标的信息?您希望在Spark应用程序内或作为外部应用程序来获取进度?在应用程序本身中,您可以从SparkSessionRaphael获得这些信息,我非常喜欢您的两个解决方案。或者通过外部应用程序获取相关的进度统计数据,知道Spark GUI在幕后。或者通过在我的Spark应用程序中的SparkSession注册一些事件函数!作为一个新的SO答案,你能提供更多关于如何做到这一点的细节吗?谢谢你,曼苏尔。然而,我更喜欢基于Spark的解决方案,即使我正在运行它。因为对于Spark Jobs来说,纱线API与阶段进度或总体进度无关。谢谢Mansoor。不过我更喜欢