如何在Spark SQL中获取类似Spark-shell的含阶段与任务的进度条?
在Spark SQL中启用控制台进度条的方法
嘿,刚好知道怎么解决这个问题!Spark Shell里的那个美观进度条其实是控制台进度跟踪功能,默认在交互式模式(比如shell)是开启的,但在批量提交的Spark SQL应用里可能默认关闭了,咱们只需要做几个简单配置就能把它调出来。
核心配置:开启控制台进度跟踪
关键是设置Spark的spark.ui.showConsoleProgress参数为true,它控制着是否在控制台输出阶段和任务的进度信息。
1. 提交应用时配置
如果是用spark-submit提交你的SQL应用jar包,直接在命令里加配置参数:
spark-submit --conf spark.ui.showConsoleProgress=true your-spark-sql-app.jar
2. 在代码中配置
如果你是在Scala/Python代码里创建SparkSession,可以直接在构建器里加入这个配置:
Scala示例:
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("MySQLProgressApp") .config("spark.ui.showConsoleProgress", "true") .getOrCreate()
Python示例:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("MySQLProgressApp") \ .config("spark.ui.showConsoleProgress", "true") \ .getOrCreate()
确保日志级别正确
如果配置后还是看不到进度条,大概率是日志级别设置太高了(比如设成了ERROR),进度条的输出属于INFO级别的日志,所以需要把日志级别调整为INFO:
Scala代码:
spark.sparkContext.setLogLevel("INFO")
Python代码:
spark.sparkContext.setLogLevel("INFO")
效果说明
配置完成后,运行你的Spark SQL任务时,控制台就会输出和Spark Shell一样的进度条,比如:
[Stage7:===========> (14174 + 5) / 62500]
这里的数字分别代表:已完成的任务数 + 正在运行的任务数 / 总任务数,进度条的长度直观反映任务完成百分比,同时也能间接看出Executor的分配和运行状态,再也不用频繁刷新Resource Manager UI啦!
内容的提问来源于stack exchange,提问作者user 923227




