dbt通过Thrift连接Spark运行模型报Cannot set database in spark错误
dbt通过Spark Thrift对接Hive Metastore运行报
Runtime Error: Cannot set database in spark!解决方法 复现场景
- 本地部署Apache Spark作为dbt计算引擎,启动关联远程Hive Metastore的Thrift服务流程:
- 启动Master节点,执行命令:
./sbin/start-master.sh - 启动Worker节点,执行命令:
./sbin/start-worker.sh spark://master_url:7077 - 启动Thrift Server,执行命令:
- 启动Master节点,执行命令:
./sbin/start-thriftserver.sh --master spark://master_url:7077 --packages org.apache.iceberg:iceberg-spark3-runtime:0.13.1 --hiveconf hive.metastore.uris=thrift://ip:9083
- dbt项目dev目标环境配置如下:
project_name: outputs: dev: host: localhost method: thrift port: 10000 schema: test_dbt threads: 4 type: spark user: admin target: dev
- 执行
dbt run --select test -t dev命令触发报错:所用dbt版本为1.1.0,提示未找到部分解析缓存文件、启动全量解析后抛出Runtime Error: Cannot set database in spark!运行时错误,dbt.log日志文件中无更多有效报错信息。
问题根因
报错由项目内source yml等配置文件中错误配置database字段导致。
Apache Spark体系内schema与database术语含义完全等价、可互换使用,但dbt框架默认的层级逻辑中database层级高于schema,与Spark的语义逻辑不匹配。dbt-spark适配器有明确强制规范:Spark场景下仅使用schema做库级配置,禁止在节点配置、目标连接Profile、source定义等任何配置位置设置database字段。
修复步骤
- 全局排查dbt项目下所有配置文件,包括source定义yml、模型配置文件、dbt连接Profile配置文件,删除所有
database相关配置项 - 原本填写在
database字段中的库名,统一迁移到对应位置的schema字段下配置 - 执行
dbt clean清理项目缓存后,重新运行dbt命令即可恢复正常
内容的提问来源于stack exchange,提问作者Jithin K J
相关产品推荐
相关产品推荐

