다음을 통해 공유

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