在 Unity Catalog 群集上部署 Scala JAR

本文介绍如何在标准访问模式下将 Scala 作业编译和部署为 启用了 Unity Catalog 的群集上的 JAR 文件。 它提供详细信息以确保:

  • Java 开发工具包 (JDK) 版本与 Databricks 群集上的 JDK 版本匹配。
  • Scala 版本与 Databricks 群集上的 Scala 版本匹配。
  • Databricks Connect 作为依赖项添加,并匹配 Databricks 群集上运行的版本。
  • 要编译的本地项目打包为单个 JAR,并包含所有依赖项。 或者,可以将依赖项安装为群集库
  • 删除 OSS Spark 上的所有依赖项,例如 spark-corehadoop-core
  • 使用的所有 JAR 都添加到允许列表

注释

标准访问模式下的 Unity Catalog 群集实现新的 Spark Connect 体系结构,该体系结构分隔客户端和服务器组件。 这种分离允许有效地共享群集,同时通过行筛选器和列掩码等措施完全强制实施 Unity Catalog 治理。 但是,标准访问模式下的 Unity Catalog 群集存在一些限制,例如缺少对 Spark 上下文和 RDD 等 API 的支持。 Unity Catalog 的计算访问模式限制列出了各种限制。

步骤 1:确保 Scala 和 JDK 版本匹配

在生成 JAR 之前,请确保用于编译代码的 Java 开发工具包 (JDK) 和 Scala 版本与群集上的 Databricks Runtime 版本上运行的版本匹配。 有关兼容版本的信息,请参阅版本支持矩阵

步骤 2:将 Databricks Connect 添加为依赖项

Databricks Connect 必须用于生成 Scala JAR 而不是 OSS Spark。 Databricks Runtime 上运行的 Spark 版本比 OSS Spark 上当前可用的版本更新,包括性能和稳定性改进。

在 Scala 项目的生成文件中(例如 sbt 的 build.sbt 或 Maven 的 pom.xml),添加对 Databricks Connect 的以下引用。 此外,请删除 OSS Spark 上的任何依赖项。

行家

<dependency>
  <groupId>com.databricks</groupId>
  <artifactId>databricks-connect</artifactId>
  <version>16.2.0</version>
</dependency>

Sbt

libraryDependencies += "com.databricks" % "databricks-connect" % "16.2.+"

步骤 3:打包为单个 JAR 并部署

Databricks 建议将应用程序和所有依赖项打包到单个 JAR 文件中,也称为 über 或胖 JAR。 对于 sbt,请使用 sbt-assembly,对于 Maven,请使用 maven-shade-plugin。 有关详细信息,请参阅官方 Maven 着色插件sbt-assembly 文档。

或者,可以将依赖项安装为群集范围的库。 有关详细信息,请参阅计算范围的库

注释

对于安装为 Unity Catalog 标准集群库的 Scala JAR,JAR 库中的类必须位于命名包中,例如 com.databricks.MyClass这样的命名包,否则在导入库时会发生错误。

使用 JAR 任务部署 JAR 文件。 请参阅用于作业的 JAR 任务

步骤 4:确保允许列出 JAR

出于安全原因,标准访问模式要求管理员将 JAR 库的 Maven 坐标和路径添加到允许列表。 请参阅使用标准访问模式(原共享访问模式)的计算上的允许列表库和 init 脚本