如何追踪已提交的Spark-SQL查询?Spark是否自带SQL日志记录功能
Spark 已提交SQL记录内置功能说明
Spark 原生自带已提交SQL的记录能力,无需二次开发埋点,只要调整基础配置即可在Spark WebUI、历史服务中溯源完整原始SQL,完全覆盖日常两种spark-sql提交场景。
必开基础配置
所有配置都可以直接写在spark-defaults.conf里全局生效,也可以在提交任务时通过--conf参数临时指定:
- 开启事件日志持久化:设置
spark.eventLog.enabled=true,指定事件日志存储路径spark.eventLog.dir=hdfs:///xxx/spark-eventLog(路径可以按需选本地路径或HDFS等分布式存储路径),这是历史服务能查看任务信息的基础,SQL执行记录会随事件日志一同持久化。 - 调整SQL展示长度上限:设置
spark.sql.ui.maxQueryStringLength=100000,默认配置下UI仅展示前1000个字符的SQL内容,长SQL会被截断,调大该参数即可展示完整语句。 - 3.x版本无需额外配置SQL监听器,内置的执行监听器已经默认注册,会自动捕获所有提交执行的SQL语句。
不同提交场景的查看方式
- 命令行执行
./bin/spark-sql交互场景:SQL提交运行后,直接进入对应Spark应用的WebUI,点击顶部SQL标签页,就能看到所有执行过的SQL条目,点击对应条目进入详情页,顶部描述栏就是完整的原始SQL内容。应用运行结束后,启动历史服务加载对应事件日志,查看路径和运行中完全一致。 ./bin/spark-submit -f X.sql文件提交场景:SQL文件内的每一条语句都会按执行顺序生成独立的SQL执行记录,哪怕是多语句的脚本文件,也能逐条对应到原始SQL内容,不存在文件提交就丢失语句记录的问题。
注意:如果是Spark 2.x早期版本,部分交互模式下存在命令行提交的短SQL未被监听器捕获的问题,升级到2.4以上或3.x版本即可原生支持,不需要额外开发自定义监听器。
内容的提问来源于stack exchange,提问作者AppleCEO
相关产品推荐
相关产品推荐

