如何使用yarn-cluster master获取进度条(包含阶段和任务)?

swd*_*dev 10 jar progress-bar hadoop-yarn apache-spark apache-spark-sql

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

spark-shell yarn --name myQuery -i ./my-query.scala
Run Code Online (Sandbox Code Playgroud)

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

[Stage7:===========>                              (14174 + 5) / 62500]
Run Code Online (Sandbox Code Playgroud)

当我使用完全相同的查询创建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 
Run Code Online (Sandbox Code Playgroud)

我没有得到任何这样的进展吧.该命令只是反复说

17/10/20 17:52:25 INFO yarn.Client: Application report for application_1507058523816_0443 (state: RUNNING)
Run Code Online (Sandbox Code Playgroud)

查询工作正常,结果很好.但是我只需要在流程结束时得到反馈.我尝试了以下内容.

  1. RUNNING Hadoop Applications的网页确实有一个进度条,但它基本上没有移动.即使在spark-shell查询的情况下,进度条也没用.
  2. 我已尝试通过YARN日志获取进度条,但在作业完成之前它们不会聚合.即使这样,日志中也没有进度条.

有没有办法在集群中的jar中启动spark查询并有进度条?

Jac*_*ski 5

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

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

在以前的Spark执行中,使用时spark-shell yarn,主服务器在客户端部署模式下为YARN ,即驱动程序在您启动的计算机上运行spark-shell

在使用的Spark执行中spark-submit --master yarn-cluster,主服务器是集群部署模式下的YARN (实际上等效于--master yarn --deploy-mode cluster),即驱动程序在YARN节点上运行。

如此说来,您不会在本地计算机上看到不错的进度条(实际上称为ConsoleProgressBar),而是在驱动程序运行的机器上得到。

一个简单的解决办法是更换yarn-clusteryarn


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

进度包括阶段ID,已完成,活动和总计任务的数量。

打开spark.ui.showConsoleProgress Spark属性并且org.apache.spark.SparkContext记录器的日志记录级别为WARN或更高(即,输出的消息较少,因此ConsoleProgressBar有一个“空格”)时,将创建ConsoleProgressBar。

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