使用 databricks-connect 在工作区之间切换
Switch between workspaces with databricks-connect
是否可以使用 databricks-connect 切换工作区?
我目前正在尝试切换:spark.conf.set('spark.driver.host', cluster_config['host'])
但这会返回以下错误:
AnalysisException: Cannot modify the value of a Spark config: spark.driver.host
可能它不会直接回答您的问题,但也可以使用 Visual Studio Databricks 插件,该插件将使用 databricks 连接,并且从那里很容易切换到不同的环境。 https://marketplace.visualstudio.com/items?itemName=paiqo.databricks-vscode.
"databricks.connectionManager": "VSCode Settings",
"databricks.connections": [
{
"apiRootUrl": "https://westeurope.azuredatabricks.net",
"displayName": "My DEV workspace",
"localSyncFolder": "c:\Databricks\dev",
"personalAccessToken": "dapi219e30212312311c6721a66ce879e"
},
{
"apiRootUrl": "https://westeurope.azuredatabricks.net",
"displayName": "My TEST workspace",
"localSyncFolder": "c:\Databricks\test",
"personalAccessToken": "dapi219e30212312311c672aaaaaaaaaa"
}
],
...
如果你查看 documentation on setting the client,你会发现有三种配置 Databricks Connect 的方法:
- 使用
databricks-connect configure
生成的配置文件 - 文件名始终为 ~/.databricks-connect
、
- 环境变量 -
DATABRICKS_ADDRESS
、DATABRICKS_API_TOKEN
、...
- Spark Configuration properties -
spark.databricks.service.address
, spark.databricks.service.token
, ... 但是当使用这个方法时,Spark Session 可能已经被初始化,所以你可能无法在不重启 Spark 的情况下即时切换.
但是如果你使用不同的 DBR 版本,那么改变配置属性是不够的,你还需要切换 Python 包含相应版本的 Databricks Connect 发行版的环境。
对于我自己的工作,我编写了以下 Zsh 脚本,它允许在不同的设置(分片)之间轻松切换 - 虽然它允许一次只使用一个分片。先决条件是:
- Python 环境已创建,名称为
<name>-shard
databricks-connect
安装到激活的 conda 环境中:
pyenv activate field-eng-shard
pip install -U databricks-connect==<DBR-version>
- databricks-connect 配置一次,特定 cluster/shard 的配置存储在
~/.databricks-connect-<name>
文件中,该文件将被符号链接到 ~/.databricks-connect
function use-shard() {
SHARD_NAME=""
if [ -z "$SHARD_NAME" ]; then
echo "Usage: use-shard shard-name"
return 1
fi
if [ ! -L ~/.databricks-connect ] && [ -f ~/.databricks-connect ]; then
echo "There is ~/.databricks-connect file - possibly you configured another shard"
elif [ -f ~/.databricks-connect-${SHARD_NAME} ]; then
rm -f ~/.databricks-connect
ln -s ~/.databricks-connect-${SHARD_NAME} ~/.databricks-connect
pyenv deactivate
pyenv activate ${SHARD_NAME}-shard
else
echo "There is no configuration file for shard: ~/.databricks-connect-${SHARD_NAME}"
fi
}
我创建了一个简单的 python 脚本来更改 .databricks-connect
配置文件中的 cluster_id
。
要执行,请确保您的虚拟环境配置了环境变量 DATABRICKS_CLUSTER。官方 databricks-connect
文档中显示 here 获取集群 ID。
设置环境变量:
export DATABRICKS_CLUSTER=your-cluster-id
设置环境变量后,只需使用以下 python 脚本即可在激活新虚拟环境时切换集群。
import os
import json
#Get databricks cluster associated with current virtual env
DATABRICKS_CLUSTER = os.getenv('DATABRICKS_CLUSTER')
HOME = os.getenv('HOME')
#Open the databricks-connect config file
with open(f'{HOME}/.databricks-connect', 'r') as j:
config = json.loads(j.read())
#Update new cluster ID
config['cluster_id'] = DATABRICKS_CLUSTER
#Save the databricks connect config file
with open(f'{HOME}/.databricks-connect', 'w') as outfile:
json.dump(config, outfile, indent=4)
是否可以使用 databricks-connect 切换工作区?
我目前正在尝试切换:spark.conf.set('spark.driver.host', cluster_config['host'])
但这会返回以下错误:
AnalysisException: Cannot modify the value of a Spark config: spark.driver.host
可能它不会直接回答您的问题,但也可以使用 Visual Studio Databricks 插件,该插件将使用 databricks 连接,并且从那里很容易切换到不同的环境。 https://marketplace.visualstudio.com/items?itemName=paiqo.databricks-vscode.
"databricks.connectionManager": "VSCode Settings",
"databricks.connections": [
{
"apiRootUrl": "https://westeurope.azuredatabricks.net",
"displayName": "My DEV workspace",
"localSyncFolder": "c:\Databricks\dev",
"personalAccessToken": "dapi219e30212312311c6721a66ce879e"
},
{
"apiRootUrl": "https://westeurope.azuredatabricks.net",
"displayName": "My TEST workspace",
"localSyncFolder": "c:\Databricks\test",
"personalAccessToken": "dapi219e30212312311c672aaaaaaaaaa"
}
],
...
如果你查看 documentation on setting the client,你会发现有三种配置 Databricks Connect 的方法:
- 使用
databricks-connect configure
生成的配置文件 - 文件名始终为~/.databricks-connect
、 - 环境变量 -
DATABRICKS_ADDRESS
、DATABRICKS_API_TOKEN
、... - Spark Configuration properties -
spark.databricks.service.address
,spark.databricks.service.token
, ... 但是当使用这个方法时,Spark Session 可能已经被初始化,所以你可能无法在不重启 Spark 的情况下即时切换.
但是如果你使用不同的 DBR 版本,那么改变配置属性是不够的,你还需要切换 Python 包含相应版本的 Databricks Connect 发行版的环境。
对于我自己的工作,我编写了以下 Zsh 脚本,它允许在不同的设置(分片)之间轻松切换 - 虽然它允许一次只使用一个分片。先决条件是:
- Python 环境已创建,名称为
<name>-shard
databricks-connect
安装到激活的 conda 环境中:
pyenv activate field-eng-shard
pip install -U databricks-connect==<DBR-version>
- databricks-connect 配置一次,特定 cluster/shard 的配置存储在
~/.databricks-connect-<name>
文件中,该文件将被符号链接到~/.databricks-connect
function use-shard() {
SHARD_NAME=""
if [ -z "$SHARD_NAME" ]; then
echo "Usage: use-shard shard-name"
return 1
fi
if [ ! -L ~/.databricks-connect ] && [ -f ~/.databricks-connect ]; then
echo "There is ~/.databricks-connect file - possibly you configured another shard"
elif [ -f ~/.databricks-connect-${SHARD_NAME} ]; then
rm -f ~/.databricks-connect
ln -s ~/.databricks-connect-${SHARD_NAME} ~/.databricks-connect
pyenv deactivate
pyenv activate ${SHARD_NAME}-shard
else
echo "There is no configuration file for shard: ~/.databricks-connect-${SHARD_NAME}"
fi
}
我创建了一个简单的 python 脚本来更改 .databricks-connect
配置文件中的 cluster_id
。
要执行,请确保您的虚拟环境配置了环境变量 DATABRICKS_CLUSTER。官方 databricks-connect
文档中显示 here 获取集群 ID。
设置环境变量:
export DATABRICKS_CLUSTER=your-cluster-id
设置环境变量后,只需使用以下 python 脚本即可在激活新虚拟环境时切换集群。
import os
import json
#Get databricks cluster associated with current virtual env
DATABRICKS_CLUSTER = os.getenv('DATABRICKS_CLUSTER')
HOME = os.getenv('HOME')
#Open the databricks-connect config file
with open(f'{HOME}/.databricks-connect', 'r') as j:
config = json.loads(j.read())
#Update new cluster ID
config['cluster_id'] = DATABRICKS_CLUSTER
#Save the databricks connect config file
with open(f'{HOME}/.databricks-connect', 'w') as outfile:
json.dump(config, outfile, indent=4)