spark-sql 是什么
spark-sql 是 Spark 发行包自带的命令行入口,既能进交互式 shell 逐条试 SQL,也能用 -e 执行单条语句、用 -f 跑整个 SQL 文件。它启动的是一个真正常驻的 Spark 应用,SQL 会被转成执行计划交给集群跑,因此可以把纯 SQL 的加工逻辑直接交给调度器拉起,不必为每种加工写 Python 或 Scala 代码。
基本信息
| 交互模式 | spark-sql(进入交互式 shell) |
|---|---|
| 批执行 | spark-sql -e "SQL" 或 spark-sql -f job.sql |
| 附带配置 | spark-sql --conf k=v --database db --master yarn |
| 初始化脚本 | -i 指定启动时先执行的 SQL 文件,适合放公共设置 |
| 位置 | Spark 发行包 bin/ 目录,与 spark-submit 同级 |
| 适用 | 纯 SQL 加工、临时排查、调度器直接调起的任务 |
常用调用
常用调用
spark-sql -e "SELECT count(*) FROM dwd_order WHERE dt='2026-10-11';"
spark-sql -f /opt/jobs/dwd_order_daily.sql
spark-sql --master yarn --conf spark.sql.shuffle.partitions=400 -f job.sql
# 交互模式里先看执行计划再决定是否全量跑
# 进入后执行:EXPLAIN SELECT ... ;
spark-sql --database dwd -e "SHOW PARTITIONS dwd_order;"典型使用场景
- 纯 SQL 的日常加工任务:调度器用 -f 直接拉起,逻辑集中在 SQL 文件里便于评审
- 临时排查:交互式连上仓库查看表结构与分区,确认数据是否已就绪
- 一次性验证:用 -e 跑一条统计确认重跑结果与预期一致
- 回归测试:把关键 SQL 放在脚本里按固定参数执行,结果可比对
- 配合参数下发:通过 --conf 或变量覆盖日期等运行参数
常用参数读法
| 参数 | 作用 | 注意 |
|---|---|---|
| -e | 执行单条(或分号分隔的)SQL | 语句过长时改用文件 |
| -f | 执行 SQL 文件 | 文件内注释建议整行书写 |
| --conf | 设置 Spark 配置 | 资源与并行度都应显式给 |
| --database | 指定默认库 | 避免脚本里到处写全限定名 |
| --master | 指定运行模式 | 交互式默认本地,生产要显式指定 |
| -i | 启动时先执行的文件 | 适合放 SET 与公共视图 |
先用 EXPLAIN 看分区裁剪与 join 策略,再全量跑;纯 SQL 任务同样需要资源参数,别用默认并行度硬扛。
交互式 shell 与脚本文件的会话级 SET 只在当前会话生效;调度任务若依赖某些 SET,必须写进同一个脚本或通过 --conf 下发,否则换个入口就失效。