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。 有关 Databricks Connect 特定语言版本的安装要求和步骤,请参阅:
  • 已启用 Unity Catalog 的 Azure Databricks 帐户和工作区。 请参阅设置和管理 Unity Catalog为 Unity Catalog 启用工作区
  • 具有 Databricks Runtime 13.3 LTS 或更高版本的 Azure Databricks 群集。
  • 群集的 Databricks Runtime 版本必须等于或更高版本的 Databricks Connect 包版本。 Databricks 建议使用与 Databricks Runtime 版本相匹配的 Databricks Connect 的最新包。 若要使用 Databricks Runtime 的更高版本中提供的功能,必须升级 Databricks Connect 包。 请参阅 Databricks Connect 发行说明,了解可用 Databricks Connect 版本列表。 有关 Databricks Runtime 版本发行说明,请参阅 Databricks Runtime 发行说明版本和兼容性
  • 群集必须使用“已分配”或“共享”群集访问模式。 请参阅访问模式

安装

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

注意

配置与群集的连接

可通过多种方式配置到群集的连接。 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 字段。

如果你已将 DATABRICKS_CLUSTER_ID 环境变量设置为群集的 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 身份验证类型所需的任何其他字段。

如果你已将 DATABRICKS_CLUSTER_ID 环境变量设置为群集的 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 身份验证类型所需的任何其他字段。

如果你已将 DATABRICKS_CLUSTER_ID 环境变量设置为群集的 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 支持连接到无服务器计算。 要使用此功能,必须满足连接到无服务器的要求。 请参阅 要求

重要

此功能具有以下限制:

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

  • 将本地环境变量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