Crie um arquivo JAR compatível com o Databricks.
Um arquivo Java (JAR) contendo código Java ou Scala para implantação em Jobs LakeFlow . Este artigo aborda os requisitos de compatibilidade JAR e a configuração de projetos para diferentes tipos compute .
Para implantação automatizada e fluxo de trabalho de integração contínua, use Databricks ativo Bundles para criar um projeto padrão com configurações de construção e implantação pré-configuradas. Consulte Criar um JAR Scala usando Databricks ativo Bundles e Bundle que carrega um arquivo JAR para o Unity Catalog. Este artigo descreve a abordagem manual para compreender os requisitos JAR e as configurações personalizadas.
Em linhas gerais, seu arquivo JAR deve atender aos seguintes requisitos de compatibilidade:
- Compatibilidade de versões : Use as mesmas versões Java Development Kit (JDK), Scala e Spark que seu compute
- Forneça as dependências : Inclua as bibliotecas necessárias no seu JAR ou instale-as no seu compute
- Use a sessão Spark do Databricks : Chame
SparkSession.builder().getOrCreate()para acessar a sessão. - Adicione seu JARà lista de permissões (somente compute padrão): Adicione seu JAR à lista de permissões
Beta
As funcionalidades serverless Scala e Java Job estão em versão Beta. Você pode usar JAR tarefa para implantar seu JAR. Consulte a opção "Gerenciar pré-visualizações Databricks caso ainda não esteja ativada.
arquitetura de computação
Os métodos serverless e computepadrão utilizam a arquiteturaSpark Connect para isolar o código do usuário e aplicar a governança Unity Catalog . O Databricks Connect fornece acesso às APIs do Spark Connect. Os modelos serverless e compute padrão não são compatíveis com APIs Spark Context ou Spark RDD . Consulte as limitações do modeloserverless e as limitações do modo de acesso padrão.
computededicada utiliza a arquitetura clássica Spark e fornece acesso a todas APIs Spark .
Encontre suas versões do JDK, Scala e Spark.
Verifique se as versões do JDK, Scala e Spark em execução no seu computesão compatíveis.
Ao criar um JAR, as versões do JDK, Scala e Spark devem corresponder às versões em execução no seu compute. Essas três versões estão interligadas: a versão do Spark determina a versão compatível do Scala, e ambas dependem de uma versão específica do JDK.
Siga estes passos para encontrar as versões corretas para o seu tipo compute :
- Serverless
- Standard
- Dedicated
- Utilize o ambiente serverless versão 4 ou superior.
- Encontre a versão Databricks Connect para o seu ambiente na tabela de versões de ambientesserverless . A versão do Databricks Connect corresponde à sua versão do Spark.
- Consulte as versões correspondentes do JDK, Scala e Spark na matriz de suporte de versões.
- Clique
Na barra lateral, clique em "Calcular " e selecione a sua compute para view a versão Databricks Runtime
- Use uma versão do Databricks Connect que corresponda à versão principal e secundária do Databricks Runtime (por exemplo, DBR 17.3 → databricks-connect 17.x).
- Consulte a matriz de suporte de versões para verificar as versões correspondentes do JDK, Scala e Spark. A versão do Databricks Connect corresponde à sua versão do Spark.
- Clique
Na barra lateral, clique em "Calcular " e selecione a sua compute para view a versão Databricks Runtime
- Encontre as versões do JDK, Scala e Spark na seção Ambiente do sistema das notas sobre a versão da sua versão Databricks Runtime (por exemplo, Databricks Runtime 17.3 LTS).
Usar versões incompatíveis do JDK, Scala ou Spark pode causar comportamentos inesperados ou impedir a execução do seu código.
Configuração do projeto
Após conhecer os requisitos de versão, configure seus arquivos de compilação e empacote seu JAR.
Defina as versões do JDK e do Scala.
Configure seu arquivo de compilação para usar as versões corretas do JDK e do Scala. Os exemplos a seguir mostram as versões do Databricks Runtime 17.3 LTS e do ambiente serverless versão 4 -Scala-preview.
- Sbt
- Maven
Em build.sbt:
scalaVersion := "2.13.16"
javacOptions ++= Seq("-source", "17", "-target", "17")
Em pom.xml:
<properties>
<scala.version>2.13.16</scala.version>
<scala.binary.version>2.13</scala.binary.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
Dependências do Spark
Adicione uma dependência Spark para acessar APIs Spark sem precisar incluí Spark no seu JAR.
- Serverless
- Standard access mode
- Dedicated access mode
Use o Databricks Connect
Adicione uma dependência do Databricks Connect (recomendado). A versão Databricks Connect deve corresponder à versão Databricks Connect no seu ambienteserverless. Marque como provided porque está incluído no tempo de execução. Não inclua dependências do Apache Spark como spark-core ou outros artefatos org.apache.spark em seu arquivo de compilação. O Databricks Connect fornece todas as APIs do Spark necessárias.
Maven pom.xml:
<dependency>
<groupId>com.databricks</groupId>
<artifactId>databricks-connect_2.13</artifactId>
<version>17.0.2</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "com.databricks" %% "databricks-connect" % "17.0.2" % "provided"
Alternativa: API Spark SQL
Você pode compilar usando spark-sql-api em vez de Databricks Connect, mas Databricks recomenda o uso do Databricks Connect porque as APIs Spark executadas em compute serverless podem diferir ligeiramente do código aberto Spark. Essas bibliotecas estão incluídas no tempo de execução, então marque-as como provided.
Maven pom.xml:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "org.apache.spark" %% "spark-sql-api" % "4.0.1" % "provided"
Use o Databricks Connect
Adicione uma dependência do Databricks Connect (recomendado). A versão do Databricks Connect deve corresponder à versão principal e secundária do Databricks Runtime do seu cluster (por exemplo, DBR 17.3 → databricks-connect 17.x). Marque como provided porque está incluído no tempo de execução. Não inclua dependências do Apache Spark como spark-core ou outros artefatos org.apache.spark em seu arquivo de compilação. O Databricks Connect fornece todas as APIs do Spark necessárias.
Maven pom.xml:
<dependency>
<groupId>com.databricks</groupId>
<artifactId>databricks-connect_2.13</artifactId>
<version>17.0.2</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "com.databricks" %% "databricks-connect" % "17.0.2" % "provided"
Alternativa: API Spark SQL
Você pode compilar usando spark-sql-api em vez de Databricks Connect, mas Databricks recomenda o uso do Databricks Connect porque as APIs Spark executadas em compute serverless podem diferir ligeiramente do código aberto Spark. Essas bibliotecas estão incluídas no tempo de execução, então marque-as como provided.
Maven pom.xml:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "org.apache.spark" %% "spark-sql-api" % "4.0.1" % "provided"
Use as APIs do Databricks Connect ou do Spark.
Adicione uma dependência do Databricks Connect (recomendado) ou compile usando a biblioteca Spark com escopo provided.
Opção 1: databricks-connect (recomendado)
Marque como provided porque está incluído no tempo de execução.
Maven pom.xml:
<dependency>
<groupId>com.databricks</groupId>
<artifactId>databricks-connect_2.13</artifactId>
<version>17.0.2</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "com.databricks" %% "databricks-connect" % "17.0.2" % "provided"
Opção 2: API Spark SQL
Você pode compilar usando spark-sql-api, mas isso não é recomendado porque a versão no Databricks pode ser ligeiramente diferente. Essas bibliotecas estão incluídas no tempo de execução, então marque-as como provided.
Maven pom.xml:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "org.apache.spark" %% "spark-sql-api" % "4.0.1" % "provided"
Opção 3: Outra biblioteca Spark
Você pode usar qualquer biblioteca Apache Spark (spark-core, spark-sql, etc.) com escopo provided, desde que a versão corresponda à versão do Spark em execução no seu cluster. Encontre a versão Spark do seu cluster na seção Ambiente do sistema das notas sobre a versão doDatabricks Runtime.
Dependências do aplicativo
Adicione a biblioteca necessária para sua aplicação ao seu arquivo de compilação. A forma como você gerencia esses elementos depende do seu tipo compute :
- Serverless
- Standard access mode
- Dedicated access mode
O serverless compute fornece Databricks Connect e um conjunto limitado de dependências (consulte as notas sobre a versão). Inclua todas as outras bibliotecas no seu JAR usando o sbt-assembly ou o pluginMaven Shade, ou adicione-as ao seu ambienteserverless.
Por exemplo, para empacotar uma biblioteca em seu JAR:
Maven pom.xml:
<dependency>
<groupId>io.circe</groupId>
<artifactId>circe-core_2.13</artifactId>
<version>0.14.10</version>
</dependency>
sbt build.sbt:
libraryDependencies += "io.circe" %% "circe-core" % "0.14.10"
O Databricks Runtime inclui muitas bibliotecas comuns além Spark. Encontre a lista completa de bibliotecas e versões fornecidas na seção Ambiente do Sistema das notas sobre a versãoDatabricks Runtime para a sua versão Databricks Runtime (por exemplo, Databricks Runtime 17.3 LTS).
Para a biblioteca fornecida pelo Databricks Runtime, adicione-as como dependências com escopo provided. Por exemplo, no Databricks Runtime 17.3 LTS, protobuf-java é fornecido:
Maven pom.xml:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.25.5</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "com.google.protobuf" % "protobuf-java" % "3.25.5" % "provided"
Para bibliotecas não fornecidas pelo Databricks Runtime, você pode empacotá-las em seu JAR usando o sbt-assembly ou Maven Shade Plugin, ou instalá-las como bibliotecas com escopo decompute.
O Databricks Runtime inclui muitas bibliotecas comuns além Spark. Encontre a lista completa de bibliotecas e versões fornecidas na seção Ambiente do Sistema das notas sobre a versãoDatabricks Runtime para a sua versão Databricks Runtime (por exemplo, Databricks Runtime 17.3 LTS).
Para a biblioteca fornecida pelo Databricks Runtime, adicione-as como dependências com escopo provided. Por exemplo, no Databricks Runtime 17.3 LTS, protobuf-java é fornecido:
Maven pom.xml:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.25.5</version>
<scope>provided</scope>
</dependency>
sbt build.sbt:
libraryDependencies += "com.google.protobuf" % "protobuf-java" % "3.25.5" % "provided"
Para bibliotecas não fornecidas pelo Databricks Runtime, você pode empacotá-las em seu JAR usando o sbt-assembly ou Maven Shade Plugin, ou instalá-las como bibliotecas com escopo decompute.
Requisitos do código
Ao escrever seu código JAR , siga estes padrões para garantir a compatibilidade com o Job Databricks .
Use a sessão Databricks Spark
Ao executar um JAR em um Job, você deve usar a sessão Spark fornecida pelo Databricks. O código a seguir mostra como acessar a sessão a partir do seu código:
- Java
- Scala
SparkSession spark = SparkSession.builder().getOrCreate();
val spark = SparkSession.builder().getOrCreate()
Use blocos try-finally para limpeza de tarefas
Se você deseja um código que seja executado de forma confiável no final do seu Job, por exemplo, para limpar arquivos temporários, use um bloco try-finally . Não utilize um gancho de desligamento (shutdown hook), pois estes não são executados de forma confiável em um Job.
Considere um JAR que consiste em duas partes:
jobBody()que contém a parte principal do Trabalho.jobCleanup()que deve ser executada apósjobBody(), independentemente de a função ter sucesso ou retornar uma exceção.
Por exemplo, jobBody() cria tabelas e jobCleanup() exclui essas tabelas.
A maneira segura de garantir que o método de limpeza seja chamado é inserir um bloco try-finally no código:
try {
jobBody()
} finally {
jobCleanup()
}
Não tente limpar usando sys.addShutdownHook(jobCleanup) ou o seguinte código:
// Do NOT clean up with a shutdown hook like this. This will fail.
val cleanupThread = new Thread { override def run = jobCleanup() }
Runtime.getRuntime.addShutdownHook(cleanupThread)
Databricks gerencia os tempos de vida dos contêineres Spark de uma forma que impede que os ganchos de desligamento sejam executados de forma confiável.
Leia os parâmetros do trabalho
Databricks passa os parâmetros para o seu Job JAR como uma matriz de strings JSON . Para acessar esses parâmetros, inspecione a matriz String passada para sua função main .
Para obter mais detalhes sobre os parâmetros, consulte Parametrizar Tarefa.
Configuração adicional
Dependendo do seu tipo compute , você pode precisar de configurações adicionais:
- Modo de acesso padrão : Por motivos de segurança, um administrador deve adicionar as coordenadas e os caminhos Maven para a biblioteca JAR a uma lista de permissões.
- computesem servidor : Se o seu Job acessar recursos privados (bancos de dados, APIs, armazenamento), configure a rede com uma Configuração de Conectividade de Rede (NCC). Veja segurança de rede sem servidor.
Próximos passos
- Aprenda como usar um pote em um Job.
- Saiba mais sobre o Databricks Connect.
- Aprenda sobre Scala no Databricks.