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

How to get the progress bar (with stages and tasks) with yarn-cluster master?

当 运行使用类似这样的东西进行 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. 运行Hadoop Applications的网页确实有进度条,但基本上不动。即使在 spark-shell 查询的情况下,进度条也是无用的。
  2. 我尝试通过 YARN 日志获取进度条,但在作业完成之前它们不会聚合。即使那样,日志中也没有进度条。

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

When I create a jar using the exact same query and run it with the following command-line (...) I don't get any such progress bar.

这两个看似相似的Spark执行的区别在于高手URL.

之前的Spark执行spark-shell yarn,master是clientdeploy模式下的YARN,即driver在你启动的机器上运行spark-shell 来自.

后面的Spark执行spark-submit --master yarn-cluster,master是cluster部署模式下的YARN(其实相当于--master yarn --deploy-mode cluster),即驱动程序在 YARN 节点上运行。

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

一个简单的解决方案是将 yarn-cluster 替换为 yarn


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

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

ConsoleProgressBar 在spark.ui.showConsoleProgress Spark 属性 开启时创建,日志级别为org.apache.spark.SparkContext 记录器为 WARN 或更高(即打印出的消息较少,因此 ConsoleProgressBar 有一个 "space")。

您可以在精通 Apache Spark 2 中找到更多信息 ConsoleProgressBar