如何获得进度条(包括阶段和任务)与纱簇主



当使用以下内容运行Spark Shell查询时:

spark-shell yarn --name myQuery -i ./my-query.scala

在我的查询中是一个简单的Spark SQL查询,在这里我读取镶木地板文件,运行简单的查询并写出镶木地板的文件。当运行这些查询时,我会得到一个很好的进度条,如下所示:

[Stage7:===========>                              (14174 + 5) / 62500]

当我使用完全相同的查询创建一个jar并使用以下命令行运行它时:

spark-submit 
--master yarn-cluster 
--driver-memory 16G 
--queue default 
--num-executors 5 
--executor-cores 4 
--executor-memory 32G 
--name MyQuery 
--class com.data.MyQuery 
target/uber-my-query-0.1-SNAPSHOT.jar 

我没有这样的进度条。命令只是重复地说

17/10/20 17:52:25 INFO yarn.Client: Application report for application_1507058523816_0443 (state: RUNNING)

查询工作正常,结果也很好。但我只需要在这个过程结束时得到反馈。我试过以下几种。

  1. RUNNING Hadoop应用程序的网页确实有进度条,但它基本上从不移动。即使在sparkshell查询的情况下,进度条也是无用的
  2. 我已经尝试过通过YARN日志获取进度条,但在作业完成之前,它们不会聚合。即便如此,日志中也没有进度条

有没有一种方法可以在集群上的jar中启动spark查询并拥有进度条?

当我使用完全相同的查询创建一个jar并使用以下命令行(…)运行它时,我没有得到任何这样的进度条。

这两个看似相似的Spark执行之间的区别在于主URL。

在前一个使用spark-shell yarn的Spark执行中,主机是客户端部署模式下的YARN,即驱动程序在启动spark-shell的机器上运行。

在后一个使用spark-submit --master yarn-cluster的Spark执行中,主机是集群部署模式下的YARN(实际上相当于--master yarn --deploy-mode cluster),即驱动程序运行在YARN节点上。

话虽如此,你不会在本地机器上得到漂亮的进度条(实际上称为ConsoleProgressBar),而是在驱动程序运行的机器上。

一个简单的解决方案是用yarn代替yarn-cluster


ConsoleProgressBar显示活动阶段到标准错误的进度,即stderr

进度包括阶段id、已完成任务数、活动任务数和总任务数。

ConsoleProgressBar是在spark.ui.showConsoleProgressspark属性打开并且org.apache.spark.SparkContext记录器的日志记录级别为WARN或更高时创建的(即打印出的消息更少,因此有一个"空间"用于ConsoleProgessBar)。

您可以在Mastering Apache Spark 2的ConsoleProgressBar中找到更多信息。

相关内容

  • 没有找到相关文章

最新更新