繁体   English   中英

使用 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

如果您查看有关设置客户端的文档,您将看到配置 Databricks Connect 的三种方法:

  • 使用databricks-connect configure生成的配置文件 - 文件名始终为~/.databricks-connect
  • 环境变量 - DATABRICKS_ADDRESSDATABRICKS_API_TOKEN ,...
  • Spark 配置属性 - spark.databricks.service.address , spark.databricks.service.token , ... 但是使用此方法时,Spark Session 可能已经初始化,因此您可能无法在不重新启动 Spark 的情况下即时切换。

但是如果你使用不同的 DBR 版本,那么仅仅改变配置属性是不够的,你还需要切换包含相应版本的 Databricks Connect 分发的 Python 环境。

对于我自己的工作,我编写了以下 Zsh 脚本,该脚本允许在不同的设置(分片)之间轻松切换 - 虽然它允许一次只使用一个分片。 先决条件是:

  • Python 环境使用名称<name>-shard
  • databricks-connect安装到激活的 conda 环境中:
pyenv activate field-eng-shard
pip install -U databricks-connect==<DBR-version>
  • databricks-connect 配置一次,特定集群/分片的配置存储在~/.databricks-connect-<name>文件中,该文件将符号链接到~/.databricks-connect
function use-shard() {
    SHARD_NAME="$1"
    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
}

可能它不会直接回答您的问题,但也可以使用 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"
            }
        ],
        ...

我创建了一个简单的 python 脚本来更改.databricks-connect配置文件中的cluster_id

要执行,请确保您的虚拟环境已配置环境变量 DATABRICKS_CLUSTER。 获取集群 ID 显示官方databricks-connect文档中。

设置环境变量:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM