Databricks Connect 的计算配置

注意

本文介绍适用于 Databricks Runtime 13.3 LTS 及更高版本的 Databricks Connect。

在本文中,你会配置属性以在 Databricks Connect 与 Azure Databricks 群集无服务器计算之间建立连接。 除非另有说明,否则此信息对 Databricks Connect 的 Python 和 Scala 版本均适用。

使用 Databricks Connect,可将热门 IDE(例如 Visual Studio Code、PyCharm、RStudio Desktop、IntelliJ IDEA、笔记本服务器和其他自定义应用程序)连接到 Azure Databricks 群集。 请参阅什么是 Databricks Connect?

要求

要配置与 Databricks 计算的连接,必须:

安装

在开始之前,需具备以下先决条件:

注意

配置与群集的连接

有多种方式可配置与群集的连接。 Databricks Connect 按以下顺序搜索配置属性,并使用它找到的第一个配置。 有关高级配置信息,请参阅适用于 Python 的 Databricks Connect 的高级用法

  1. DatabricksSession 类的 remote() 方法
  2. Databricks 配置文件
  3. DATABRICKS_CONFIG_PROFILE 环境变量
  4. 每个配置属性具有一个环境变量
  5. 名为 DEFAULT 的 Databricks 配置文件

DatabricksSession 类的 remote() 方法

对于仅适用于 Azure Databricks 个人访问令牌身份验证的此选项,请指定工作区实例名称、Azure Databricks 个人访问令牌和群集的 ID。

可通过多种方式初始化 DatabricksSession 类:

  • DatabricksSession.builder.remote() 中设置 hosttokencluster_id 字段。
  • 使用 Databricks SDK 的 Config 类。
  • 指定 Databricks 配置文件和 cluster_id 字段。

Databricks 建议通过环境变量或配置文件配置属性,而不是在代码中指定这些连接属性,如本部分通篇所述。 以下代码示例假定你提供建议的retrieve_*函数的一些实现,以从用户或其他配置存储(例如,Azure 密钥保管库)中获取必要的属性。

每种方法的代码如下所示:

Python

# Set the host, token, and cluster_id fields in DatabricksSession.builder.remote.
# If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
# cluster's ID, you do not also need to set the cluster_id field here.
from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.remote(
host       = f"https://{retrieve_workspace_instance_name()}",
token      = retrieve_token(),
cluster_id = retrieve_cluster_id()
).getOrCreate()

Scala

// Set the host, token, and clusterId fields in DatabricksSession.builder.
// If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
// cluster's ID, you do not also need to set the clusterId field here.
import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder()
    .host(retrieveWorkspaceInstanceName())
    .token(retrieveToken())
    .clusterId(retrieveClusterId())
    .getOrCreate()

Python

# Use the Databricks SDK's Config class.
# If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
# cluster's ID, you do not also need to set the cluster_id field here.
from databricks.connect import DatabricksSession
from databricks.sdk.core import Config

config = Config(
host       = f"https://{retrieve_workspace_instance_name()}",
token      = retrieve_token(),
cluster_id = retrieve_cluster_id()
)

spark = DatabricksSession.builder.sdkConfig(config).getOrCreate()

Scala

// Use the Databricks SDK's Config class.
// If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
// cluster's ID, you do not also need to set the clusterId field here.
import com.databricks.connect.DatabricksSession
import com.databricks.sdk.core.DatabricksConfig

val config = new DatabricksConfig()
    .setHost(retrieveWorkspaceInstanceName())
    .setToken(retrieveToken())
val spark = DatabricksSession.builder()
    .sdkConfig(config)
    .clusterId(retrieveClusterId())
    .getOrCreate()

Python

# Specify a Databricks configuration profile along with the `cluster_id` field.
# If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
# cluster's ID, you do not also need to set the cluster_id field here.
from databricks.connect import DatabricksSession
from databricks.sdk.core import Config

config = Config(
profile    = "<profile-name>",
cluster_id = retrieve_cluster_id()
)

spark = DatabricksSession.builder.sdkConfig(config).getOrCreate()

Scala

// Specify a Databricks configuration profile along with the clusterId field.
// If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
// cluster's ID, you do not also need to set the clusterId field here.
import com.databricks.connect.DatabricksSession
import com.databricks.sdk.core.DatabricksConfig

val config = new DatabricksConfig()
    .setProfile("<profile-name>")
val spark = DatabricksSession.builder()
    .sdkConfig(config)
    .clusterId(retrieveClusterId())
    .getOrCreate()

Databricks 配置文件

对于此选项,请创建或标识 Azure Databricks 配置文件,其中包含字段 cluster_id,以及你要使用的 Databricks 身份验证类型所需的任何其他字段。

每种身份验证类型所需的配置文件字段如下:

然后通过配置类设置此配置文件的名称。

可以通过多种方式指定 cluster_id

  • 在配置文件中包含 cluster_id 字段,然后只需指定配置文件的名称。
  • 指定配置文件名称和 cluster_id 字段。

如果已使用群集 ID 设置 DATABRICKS_CLUSTER_ID 环境变量,则也无需指定 cluster_id

每种方法的代码如下所示:

Python

# Include the cluster_id field in your configuration profile, and then
# just specify the configuration profile's name:
from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.profile("<profile-name>").getOrCreate()

Scala

// Include the cluster_id field in your configuration profile, and then
// just specify the configuration profile's name:
import com.databricks.connect.DatabricksSession
import com.databricks.sdk.core.DatabricksConfig

val config = new DatabricksConfig()
    .setProfile("<profile-name>")
    val spark = DatabricksSession.builder()
    .sdkConfig(config)
    .getOrCreate()

Python

# Specify the configuration profile name along with the cluster_id field.
# In this example, retrieve_cluster_id() assumes some custom implementation that
# you provide to get the cluster ID from the user or from some other
# configuration store:
from databricks.connect import DatabricksSession
from databricks.sdk.core import Config

config = Config(
profile    = "<profile-name>",
cluster_id = retrieve_cluster_id()
)

spark = DatabricksSession.builder.sdkConfig(config).getOrCreate()

Scala

// Specify a Databricks configuration profile along with the clusterId field.
// If you have already set the DATABRICKS_CLUSTER_ID environment variable with the
// cluster's ID, you do not also need to set the clusterId field here.
import com.databricks.connect.DatabricksSession
import com.databricks.sdk.core.DatabricksConfig

val config = new DatabricksConfig()
    .setProfile("<profile-name>")
val spark = DatabricksSession.builder()
    .sdkConfig(config)
    .clusterId(retrieveClusterId())
    .getOrCreate()

DATABRICKS_CONFIG_PROFILE 环境变量

对于此选项,请创建或标识 Azure Databricks 配置文件,其中包含字段 cluster_id,以及你要使用的 Databricks 身份验证类型所需的任何其他字段。

如果已使用群集 ID 设置 DATABRICKS_CLUSTER_ID 环境变量,则也无需指定 cluster_id

每种身份验证类型所需的配置文件字段如下:

DATABRICKS_CONFIG_PROFILE 环境变量设置为此配置文件的名称。 然后初始化 DatabricksSession 类:

Python

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Scala

import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder().getOrCreate()

每个配置属性的环境变量

对于此选项,请设置 DATABRICKS_CLUSTER_ID 环境变量,以及你要使用的 Databricks 身份验证类型所需的任何其他环境变量。

每种身份验证类型所需的环境变量如下:

然后初始化 DatabricksSession 类:

Python

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Scala

import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder().getOrCreate()

名为 DEFAULT 的 Databricks 配置文件

对于此选项,请创建或标识 Azure Databricks 配置文件,其中包含字段 cluster_id,以及你要使用的 Databricks 身份验证类型所需的任何其他字段。

如果已使用群集 ID 设置 DATABRICKS_CLUSTER_ID 环境变量,则也无需指定 cluster_id

每种身份验证类型所需的配置文件字段如下:

将此配置文件命名为 DEFAULT

然后初始化 DatabricksSession 类:

Python

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Scala

import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder().getOrCreate()

配置与无服务器计算的连接

重要

此功能目前以公共预览版提供。

适用于 Python 的 Databricks Connect 支持连接到无服务器计算。 要使用此功能,必须满足连接到无服务器的要求。 请参阅 要求

重要

此功能具有以下限制:

  • 此功能仅支持适用于 Python 的 Databricks Connect。
  • 所有适用于 Python 的 Databricks Connect 限制
  • 只有作为无服务器计算环境的一部分包含的 Python 依赖项才能用于 UDF。 无法安装其他依赖项。
  • 不支持具有自定义模块的 UDF。

可以通过以下方式之一配置与无服务器计算的连接:

  • 将本地环境变量DATABRICKS_SERVERLESS_COMPUTE_ID设置为auto。 如果设置了此环境变量,则 Databricks Connect 会忽略cluster_id

  • 在本地 Databricks 配置文件中,设置 serverless_compute_id = auto,然后从代码中引用该配置文件。

    [DEFAULT]
    host = https://my-workspace.cloud.databricks.com/
    serverless_compute_id = auto
    token = dapi123...
    
  • 或使用以下选项之一:

from databricks.connect import DatabricksSession as SparkSession

spark = DatabricksSession.builder.serverless(True).getOrCreate()
from databricks.connect import DatabricksSession as SparkSession

spark = DatabricksSession.builder.remote(serverless=True).getOrCreate()

注意

无服务器计算会话在处于非活动状态 10 分钟后超时。 然后,应使用 getOrCreate() 连接到无服务器计算,创建新的 Spark 会话。

验证与 Databricks 的连接

要验证是否已为 Databricks Connect 正确设置环境、默认凭据和与计算的连接,请运行databricks-connect test命令,该命令在检测到设置中的任何不兼容时,会失败并显示非零退出代码和相应的错误消息。

databricks-connect test

在 Databricks Connect 14.3 及更高版本中,还可以使用 validateSession() 验证环境:

DatabricksSession.builder.validateSession(True).getOrCreate()

禁用 Databricks Connect

可以在任何给定群集上禁用 Databricks Connect(和基础 Spark Connect)服务。

若要禁用 Databricks Connect 服务,请在群集上设置以下 Spark 配置

spark.databricks.service.server.enabled false