如何通过Bitbucket Pipeline正确连接Databricks以运行测试
解决Bitbucket Pipeline中Databricks Connect连接失败的问题
针对你遇到的RuntimeError: Only remote Spark sessions using Databricks Connect are supported. Could not find connection parameters to start a Spark remote session.错误,以下是几个可靠的修复方案:
1. 抛弃交互式配置,直接用环境变量注入连接参数
databricks-connect configure的交互式输入在Bitbucket Pipeline的非TTY环境下可能无法正确生成配置文件,直接设置环境变量更可靠。修改Pipeline的script部分:
# Install Python dependencies - pip install -r requirements.txt # 直接设置Databricks Connect环境变量 - export DATABRICKS_HOST="$DATABRICKS_HOST" - export DATABRICKS_TOKEN="$DATABRICKS_TOKEN" - export DATABRICKS_CLUSTER_ID="$DATABRICKS_CLUSTER_ID" - export DATABRICKS_ORG_ID="$DATABRICKS_ORG_ID" - export SPARK_REMOTE="databricks://token@$DATABRICKS_HOST?clusterId=$DATABRICKS_CLUSTER_ID&orgId=$DATABRICKS_ORG_ID" # 验证连接(可选但推荐) - pip install databricks-connect - databricks-connect test # Install and run pytest - pip install pytest - pytest tests/
Spark会优先读取SPARK_REMOTE环境变量,跳过本地配置文件的依赖。
2. 确保Databricks Connect版本与集群严格匹配
本地正常但CI报错的常见原因是版本不兼容:
- 查看你的Databricks集群版本(比如13.3 LTS)
- 在Pipeline中指定安装对应版本的databricks-connect:
pip install databricks-connect==13.3.*
主版本号必须完全一致,小版本可以用通配符匹配。
3. 在测试代码中显式初始化Spark会话
如果测试代码依赖自动初始化,CI环境下可能无法识别连接参数,在测试的conftest.py中添加显式初始化逻辑:
import os from pyspark.sql import SparkSession def pytest_sessionstart(session): # 从环境变量读取参数构建远程连接 spark_remote_url = ( f"databricks://token@{os.environ['DATABRICKS_HOST']}" f"?clusterId={os.environ['DATABRICKS_CLUSTER_ID']}" f"&orgId={os.environ['DATABRICKS_ORG_ID']}" ) spark = SparkSession.builder.remote(spark_remote_url).getOrCreate() # 将spark会话存入pytest配置,供所有测试用例调用 session.config.spark = spark
4. 检查配置文件的权限与路径
如果坚持用databricks-connect configure,可以手动指定配置文件路径并确保权限:
# 生成配置文件到指定路径 - echo -e "$DATABRICKS_HOST\n$DATABRICKS_TOKEN\n$DATABRICKS_CLUSTER_ID\n$DATABRICKS_ORG_ID" | databricks-connect configure --config-file /tmp/.databricks-connect # 设置环境变量让Spark读取这个配置文件 - export DATABRICKS_CONNECT_CONFIG_FILE="/tmp/.databricks-connect"
内容的提问来源于stack exchange,提问作者Ossz
相关产品推荐
相关产品推荐

