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

时间:2017-10-20 17:59:22

标签: apache-spark jar progress-bar apache-spark-sql yarn

使用以下内容运行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 Applications的网页确实有一个进度条,但它基本上不会移动。即使在spark-shell查询的情况下,进度条也没用。
  2. 我尝试通过YARN日志获取进度条,但在作业完成之前它们不会聚合。即便如此,日志中也没有进度条。
  3. 是否有办法在群集中的jar中启动spark查询并拥有进度条?

1 个答案:

答案 0 :(得分:5)

  

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

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

在使用#!/bin/sh file=./testin while read -r var1 var2 rest; do # var1/var2 are field1/field2, rest stores the remaining fields obabel -:"$var2" -o mol -O ./${var1%.*}.mol done <"$file" 的前Spark执行中,主服务器在客户端部署模式下是YARN,即驱动程序在从spark-shell yarn开始的计算机上运行。

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

话虽如此,但您在本地计算机上获得了不错的进度条(实际上称为ConsoleProgressBar),但在运行驱动程序的计算机上却没有。

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

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

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

spark.ui.showConsoleProgress Spark属性打开并且 org.apache.spark.SparkContext 记录器的日志记录级别为stderr时,会创建ConsoleProgressBar或更高(即打印出更少的消息,因此对于ConsoleProgressBar有一个&#34;空格&#34;)

您可以在掌握Apache Spark 2 ConsoleProgressBar

中找到更多信息