Databricks Connect 的高级用法

注释

本文探讨适用于 Databricks Runtime 14.0 及以上版本的 Databricks Connect。

本文介绍超越 Databricks Connect 的基本设置的主题。

配置 Spark Connect 连接字符串

除了使用 “配置与群集的连接”中所述的选项连接到群集之外,更高级的选项是使用 Spark Connect 连接字符串进行连接。 可以在函数中 remote 传递字符串或设置 SPARK_REMOTE 环境变量。

注释

只能使用 Databricks 个人访问令牌身份验证 通过 Spark Connect 连接字符串进行连接。

Python

使用 remote 函数设置连接字符串:

from databricks.connect import DatabricksSession

workspace_instance_name = retrieve_workspace_instance_name()
token                   = retrieve_token()
cluster_id              = retrieve_cluster_id()

spark = DatabricksSession.builder.remote(
   f"sc://{workspace_instance_name}:443/;token={token};x-databricks-cluster-id={cluster_id}"
).getOrCreate()

或者,设置 SPARK_REMOTE 环境变量:

sc://<workspace-instance-name>:443/;token=<access-token-value>;x-databricks-cluster-id=<cluster-id>

然后初始化 DatabricksSession 类:

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Scala

SPARK_REMOTE设置环境变量:

sc://<workspace-instance-name>:443/;token=<access-token-value>;x-databricks-cluster-id=<cluster-id>

然后初始化 DatabricksSession 类:

import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder.getOrCreate()

将 Spark Connect 服务器与 Databricks Connect 配合使用

可以选择性地运行 Databricks Connect,并连接开源 Spark Connect 服务器。

重要

Databricks Runtime 和 Databricks Connect 中提供的某些功能专用于 Databricks,或者尚未在开源 Apache Spark 中发布。 如果代码依赖于这些功能,则以下步骤可能会失败并出现错误。

  1. 启动本地 Spark Connect 服务器。 请参阅 如何使用 Spark Connect

  2. 配置 Databricks Connect。 将环境变量 SPARK_REMOTE 设置为指向本地 Spark Connect 服务器。 请参阅 使用客户端连接到 Spark Connect

    export SPARK_REMOTE="sc://localhost"
    
  3. 初始化 Databricks 会话:

    Python

    from databricks.connect import DatabricksSession
    
    spark = DatabricksSession.builder.getOrCreate()
    

    Scala

    import com.databricks.connect.DatabricksSession
    
    val spark = DatabricksSession.builder.getOrCreate()
    

其他 HTTP 标头

Databricks Connect 通过 HTTP/2 通过 gRPC 与 Databricks 群集通信。

为了更好地控制来自客户端的请求,高级用户可以选择在客户端和 Azure Databricks 群集之间安装代理服务。 在某些情况下,代理可能需要 HTTP 请求中的自定义标头。

使用 header() 方法将自定义标头添加到 HTTP 请求:

Python

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.header('x-custom-header', 'value').getOrCreate()

Scala

import com.databricks.connect.DatabricksSession

val spark = DatabricksSession.builder.header("x-custom-header", "value").getOrCreate()

证书

如果群集依赖于自定义 SSL/TLS 证书来解析 Azure Databricks 工作区完全限定的域名(FQDN),则必须在本地开发计算机上设置环境变量 GRPC_DEFAULT_SSL_ROOTS_FILE_PATH 。 此环境变量必须设置为群集上已安装证书的完整路径。

Python

以下示例设置此环境变量:

import os

os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "/etc/ssl/certs/ca-bundle.crt"

有关设置环境变量的其他方法,请参阅作系统的文档。

Scala

Java 和 Scala 不提供以编程方式配置环境变量的方法。 请参阅您的操作系统或 IDE 文档,以获取有关如何将其配置为应用程序一部分的信息。

日志记录和调试日志

Python

用于 Python 的 Databricks Connect 使用标准 Python 日志记录生成日志。

日志将发送到标准错误流(stderr),默认情况下它们处于关闭状态。 设置环境变量 SPARK_CONNECT_LOG_LEVEL=debug 将修改此默认设置,并打印 DEBUG 级别及更高级别的所有日志消息。

Scala

用于 Scala 的 Databricks Connect 使用 SLF4J 日志记录,并且不随任何 SLF4J 提供程序一起提供。

使用 Databricks Connect 的应用程序预期应包括一个 SLF4J 提供程序,并在某些情况下被配置为打印日志消息。

  • 最简单的选项是包括 slf4j-simple 提供程序 ,该提供程序将日志消息输出到 INFO 级别和更高级别的标准错误流(stderr)。
  • 更可配置的替代方法是使用 slf4j-reload4j 提供程序 ,该提供程序从 log4j.properties 类路径中的文件选取配置。

以下示例演示了一个简单的 log4j.properties 文件。

log4j.rootLogger=INFO,stderr

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

如果根记录器(或特定记录器)配置为 DEBUG 级别,则会输出调试日志。

log4j.rootLogger=DEBUG,stderr