You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在日志中定位Scala代码中执行的Spark SQL查询语句

排查Spark SQL执行日志及运行状态的方法

注意:sqlContext.sql()是Spark的转换算子,不会立刻触发SQL执行,只有后续调用df.write这类行动算子时才会真正提交作业运行,所以SQL相关日志会和csv写入作业的日志出现在同一时间段。

1. 先确认日志输出级别配置

Spark默认如果将日志级别设置为WARN及以上,普通SQL的解析、执行过程日志不会被打印,可通过以下方式调整:

  • 作业启动时临时添加配置:--conf spark.log.level=INFO
  • 固定修改log4j.properties配置,添加条目:log4j.logger.org.apache.spark.sql=INFO 即可开启SQL执行相关日志输出。

2. 日志检索的正确关键词

不要直接搜索完整SQL语句,优先用以下特征关键词检索:

  • 你用到的表名tab1:SQL解析阶段会打印类似Parsing command: select * from tab1的日志条目
  • 输出路径/tmp/loc/src:写入阶段会打印路径、写入文件数、数据量等相关记录
  • csv写入作业标识:行动算子触发作业时会打印Starting job: csv at <代码对应行数位置>的日志,关联的SQL执行记录就在该条日志前后。

3. 无需日志直接验证执行成功的方法

如果日志无法检索到,可以直接验证下游输出来确认运行状态:

  • 检查输出路径/tmp/loc/src下是否存在_SUCCESS标记文件,该文件生成即代表整个写入作业全链路执行成功,上游的SQL查询必然已经正常运行完成
  • 手动读取生成的csv文件统计行数,和源表tab1的行数做对比,数据一致即可完全确认执行符合预期。

4. 后续可添加的自定义日志配置

如果需要固定留存SQL执行记录,可以在代码中主动打印SQL语句:

val sqlText = "select * from tab1"
// 主动将执行SQL打印到作业日志
logInfo(s"Executing custom SQL: $sqlText")
val df = sqlContext.sql(sqlText)
df.write.option("header",false).csv("/tmp/loc/src")

内容的提问来源于stack exchange,提问作者Samrat Saha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:39:01