Apache spark 如何使用纱线簇主控器获取进度条(包括阶段和任务)?
使用以下内容运行Spark Shell查询时:Apache spark 如何使用纱线簇主控器获取进度条(包括阶段和任务)?,apache-spark,jar,progress-bar,apache-spark-sql,yarn,Apache Spark,Jar,Progress Bar,Apache Spark Sql,Yarn,使用以下内容运行Spark Shell查询时: spark-shell yarn --name myQuery -i ./my-query.scala [Stage7:===========> (14174 + 5) / 62500] 在我的查询中是SimpleSparkSQL查询,在这里我读取拼花文件,运行简单查询并写出拼花文件。运行这些查询时,我会得到一个很好的进度条,如下所示: spark-shell yarn --nam
spark-shell yarn --name myQuery -i ./my-query.scala
[Stage7:===========> (14174 + 5) / 62500]
在我的查询中是SimpleSparkSQL查询,在这里我读取拼花文件,运行简单查询并写出拼花文件。运行这些查询时,我会得到一个很好的进度条,如下所示:
spark-shell yarn --name myQuery -i ./my-query.scala
[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)
查询工作正常,结果也很好。但我只需要在过程结束时得到反馈。我试过以下方法
Spark shell Thread
的前一次Spark执行中,主控程序是处于客户端部署模式的Thread,即驱动程序在启动Spark shell
的机器上运行
在后一个使用Spark submit--master warn cluster
的Spark执行中,master是cluster部署模式下的纱线(实际上相当于--master warn--deploy mode cluster
),即驱动程序在纱线节点上运行
话虽如此,您将不会在本地机器上获得良好的进度条(实际上称为进度条),而是在驱动程序运行的机器上
一个简单的解决方案是用纱线
替换纱线簇
控制台进度条显示活动阶段到标准错误的进度,即
stderr
进度包括阶段id、已完成、活动和总任务数
ConsoleProgressBar是在spark.ui.showConsoleProgressspark属性打开且org.apache.spark.SparkContext记录器的日志记录级别为WARN
或更高时创建的(即打印的消息较少,因此有一个“空间”用于ConsoleProgressBar)
您可以在掌握ApacheSpark2中找到更多信息。SparkSubmit.scala中的最新提交说明:“[Spark-21568][CORE]ConsoleProgressBar应仅在Shell中启用”。使用Spark UI监控您的工作进度。谢谢。我的工作是有一个可移植的scala代码,它作为
spark shell
脚本运行,还可以编译成一个jar,用于spark submit
。因此,我可以在开发时使用进度条。这种方法可行,但还远远不够理想。这正是我需要的。