JAVA 보관(JAR)은 Lakeflow 작업에서 배포할 Java 또는 Scala 코드를 패키지합니다. 이 문서에서는 다양한 컴퓨팅 유형에 대한 JAR 호환성 요구 사항 및 프로젝트 구성에 대해 설명합니다.
팁 (조언)
자동화된 배포 및 연속 통합 워크플로의 경우 Databricks 자산 번들을 사용하여 미리 구성된 빌드 및 배포 설정이 있는 템플릿에서 프로젝트를 만듭니다. Databricks 자산 번들을 사용하여 Scala JAR 빌드 및 JAR 파일을 Unity 카탈로그에 업로드하는 번들을 참조하세요. 이 문서에서는 JAR 요구 사항 및 사용자 지정 구성을 이해하기 위한 수동 방법을 설명합니다.
높은 수준에서 JAR은 호환성을 위해 다음 요구 사항을 충족해야 합니다.
- 버전 일치: 컴퓨팅 환경과 동일한 Java Development Kit (JDK), Scala 및 Spark 버전을 사용합니다.
- 종속성 제공: JAR에 필수 라이브러리를 포함하거나 컴퓨팅에 설치
-
Databricks Spark 세션 사용: 세션에 액세스하기 위한 호출
SparkSession.builder().getOrCreate() - JAR 허용 목록(표준 컴퓨팅에만 해당): 허용 목록에 JAR 추가
중요합니다
서버리스 Scala 및 Java 작업은 베타에 있습니다. JAR 작업을 사용하여 JAR을 배포할 수 있습니다. 아직 사용하도록 설정되지 않은 경우 Azure Databricks 미리 보기 관리를 참조하세요.
컴퓨팅 아키텍처
서버리스 및 표준 컴퓨팅은Spark Connect 아키텍처 를 사용하여 사용자 코드를 격리하고 Unity 카탈로그 거버넌스를 적용합니다. Databricks Connect는 Spark Connect API에 대한 액세스를 제공합니다. 서버리스 및 표준 컴퓨팅은 Spark 컨텍스트 또는 Spark RDD API를 지원하지 않습니다. 서버리스 제한 사항 및 표준 액세스 모드 제한을 참조하세요.
전용 컴퓨팅 은 클래식 Spark 아키텍처 를 사용하며 모든 Spark API에 대한 액세스를 제공합니다.
JDK, Scala 및 Spark 버전 찾기
컴퓨팅에서 실행되는 JDK, Scala 및 Spark 버전 일치
JAR을 빌드할 때 JDK, Scala 및 Spark 버전은 컴퓨팅에서 실행되는 버전과 일치해야 합니다. 이러한 세 버전은 상호 연결됩니다. Spark 버전은 호환되는 Scala 버전을 결정하며 둘 다 특정 JDK 버전에 따라 달라집니다.
다음 단계에 따라 컴퓨팅 유형에 대한 올바른 버전을 찾습니다.
Serverless
- 서버리스 환경 버전 4 이상 사용
- 서버리스 환경 버전 테이블에서 사용자 환경에 대한 Databricks Connect 버전을 찾습니다. Databricks Connect 버전은 Spark 버전에 해당합니다.
- 버전 지원 매트릭스에서 일치하는 JDK, Scala 및 Spark 버전을 조회합니다.
스탠다드
-
을 클릭합니다. 사이드바의 컴퓨팅을 선택하여 컴퓨트를 선택하고 Databricks 런타임 버전을 확인합니다.
- Databricks Runtime 주 버전 및 부 버전과 일치하는 Databricks Connect 버전 사용(예: Databricks Runtime 17.3 → databricks-connect 17.x)
- 버전 지원 매트릭스에서 일치하는 JDK, Scala 및 Spark 버전을 조회합니다. Databricks Connect 버전은 Spark 버전에 해당합니다.
Dedicated
-
을 클릭합니다. 사이드바의 컴퓨팅을 선택하여 컴퓨트를 선택하고 Databricks 런타임 버전을 확인합니다.
- Databricks 런타임 버전에 대한 릴리스 정보(예: Databricks Runtime 17.3 LTS)의 시스템 환경 섹션에서 JDK, Scala 및 Spark 버전을 찾습니다.
비고
일치하지 않는 JDK, Scala 또는 Spark 버전을 사용하면 예기치 않은 동작이 발생하거나 코드가 실행되지 않을 수 있습니다.
프로젝트 설정
버전 요구 사항을 알고 나면 빌드 파일을 구성하고 JAR을 패키지합니다.
JDK 및 Scala 버전 설정
올바른 JDK 및 Scala 버전을 사용하도록 빌드 파일을 구성합니다. 다음 예제에서는 Databricks Runtime 17.3 LTS 및 서버리스 환경 버전 4-scala-preview의 버전을 보여 줍니다.
Sbt
build.sbt의 경우
scalaVersion := "2.13.16"
javacOptions ++= Seq("-source", "17", "-target", "17")
메이븐
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>
Spark 종속성
SPARK 종속성을 추가하여 JAR에서 Spark를 패키징하지 않고 Spark API에 액세스합니다.
Serverless
Databricks Connect 사용
Databricks Connect에 대한 종속성을 추가합니다(권장). Databricks Connect 버전은 서버리스 환경의 Databricks Connect 버전과 일치해야 합니다.
provided 런타임에 포함되어 있으므로 표시합니다. 빌드 파일에 Apache Spark 종속성 spark-core 또는 기타 org.apache.spark 아티팩트 등을 포함하지 마세요. Databricks Connect는 필요한 모든 Spark API를 제공합니다.
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"
대안: spark-sql-api
Databricks Connect 대신 spark-sql-api으로 컴파일할 수 있지만, 서버리스 컴퓨팅에서 실행되는 Spark API는 오픈 소스 Spark와 약간 다를 수 있으므로 Databricks Connect를 사용하는 것이 좋습니다. 이러한 라이브러리는 런타임에 포함되므로 로 표시합니다 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"
표준 액세스 모드
Databricks Connect 사용
Databricks Connect에 대한 종속성을 추가합니다(권장). Databricks Connect 버전은 클러스터의 주 및 부 Databricks 런타임 버전(예: Databricks Runtime 17.3 → databricks-connect 17.x)과 일치해야 합니다.
provided 런타임에 포함되어 있으므로 표시합니다. 빌드 파일에 Apache Spark 종속성 spark-core 또는 기타 org.apache.spark 아티팩트 등을 포함하지 마세요. Databricks Connect는 필요한 모든 Spark API를 제공합니다.
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"
대안: spark-sql-api
Databricks Connect 대신 spark-sql-api으로 컴파일할 수 있지만, 서버리스 컴퓨팅에서 실행되는 Spark API는 오픈 소스 Spark와 약간 다를 수 있으므로 Databricks Connect를 사용하는 것이 좋습니다. 이러한 라이브러리는 런타임에 포함되므로 로 표시합니다 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"
전용 액세스 모드
Databricks Connect 또는 Spark API 사용
Databricks Connect(권장)에 대한 종속성을 추가하거나 범위 provided가 있는 Spark 라이브러리에 대해 컴파일합니다.
옵션 1: databricks-connect(권장)
provided 런타임에 포함되어 있으므로 표시합니다.
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"
옵션 2: spark-sql-api
Databricks의 버전이 약간 다를 수 있기 때문에, spark-sql-api에 대해 컴파일할 수 있지만, 이는 권장되지 않습니다. 이러한 라이브러리는 런타임에 포함되므로 로 표시합니다 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"
옵션 3: 기타 Spark 라이브러리
클러스터에서 실행 중인 Spark 버전에 일치할 경우, 범위 spark-core 내에서 Apache Spark 라이브러리(spark-sql, provided 등)를 사용할 수 있습니다.
Databricks 런타임 릴리스 정보 시스템 환경 섹션에서 클러스터의 Spark 버전을 찾습니다.
애플리케이션 종속성
애플리케이션의 필수 라이브러리를 빌드 파일에 추가합니다. 이러한 항목을 관리하는 방법은 컴퓨팅 유형에 따라 달라집니다.
Serverless
서버리스 컴퓨팅은 Databricks Connect 및 제한된 종속성 집합을 제공합니다(릴리스 정보 참조). sbt-assembly 또는 Maven 셰이드 플러그 인을 사용하여 JAR의 다른 모든 라이브러리를 패키지하거나 서버리스 환경에 추가합니다.
예를 들어 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"
표준 액세스 모드
Databricks 런타임에는 Spark 이외의 많은 공통 라이브러리가 포함되어 있습니다. Databricks 런타임 버전에 대한 Databricks 런타임 릴리스 정보(예: Databricks Runtime17.3 LTS)의 시스템 환경 섹션에서 제공된 라이브러리 및 버전의 전체 목록을 찾습니다.
Databricks Runtime에서 제공하는 라이브러리의 경우 범위를 provided사용하여 종속성으로 추가합니다. 예를 들어 Databricks Runtime 17.3 LTS에서 protobuf-java 다음이 제공됩니다.
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"
Databricks 런타임에서 제공하지 않는 라이브러리의 경우 sbt 어셈블리 또는 Maven 셰이드 플러그 인을 사용하여 JAR에 패키징하거나 컴퓨팅 범위 라이브러리로 설치합니다.
전용 액세스 모드
Databricks 런타임에는 Spark 이외의 많은 공통 라이브러리가 포함되어 있습니다. Databricks 런타임 버전에 대한 Databricks 런타임 릴리스 정보(예: Databricks Runtime17.3 LTS)의 시스템 환경 섹션에서 제공된 라이브러리 및 버전의 전체 목록을 찾습니다.
Databricks Runtime에서 제공하는 라이브러리의 경우 범위를 provided사용하여 종속성으로 추가합니다. 예를 들어 Databricks Runtime 17.3 LTS에서 protobuf-java 다음이 제공됩니다.
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"
Databricks 런타임에서 제공하지 않는 라이브러리의 경우 sbt 어셈블리 또는 Maven 셰이드 플러그 인을 사용하여 JAR에 패키징하거나 컴퓨팅 범위 라이브러리로 설치합니다.
코드 요구 사항
JAR 코드를 작성할 때 이러한 패턴을 따라 Databricks 작업과의 호환성을 보장합니다.
Databricks Spark 세션 사용
작업에서 JAR을 실행하는 경우 Azure Databricks에서 제공하는 Spark 세션을 사용해야 합니다. 코드에서 세션을 액세스하는 방법을 보여 주는 코드는 다음과 같습니다.
Java
SparkSession spark = SparkSession.builder().getOrCreate();
Scala
val spark = SparkSession.builder().getOrCreate()
작업 정리에 블록 사용 try-finally
작업 종료 시 안정적으로 실행되는 코드(예: 임시 파일 정리)를 원하는 경우 블록을 사용합니다 try-finally . 작업에서 안정적으로 실행되지 않으므로 종료 후크를 사용하지 마세요.
다음 두 부분으로 구성된 JAR을 고려합니다.
-
jobBody()- 작업의 주요 부분을 포함합니다. -
jobCleanup()는jobBody()이 성공하거나 예외를 반환하더라도 후에 실행되어야 합니다.
예를 들어 jobBody()는 테이블을 만들고 jobCleanup()은 해당 테이블을 삭제합니다.
정리 메서드가 호출되도록 하는 안전한 방법은 try-finally 블록을 코드에 배치하는 것입니다.
try {
jobBody()
} finally {
jobCleanup()
}
sys.addShutdownHook(jobCleanup) 또는 다음 코드를 사용하여 정리하려고 하지 마세요.
// 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)
Azure Databricks는 종료 후크가 안정적으로 실행되지 않도록 하는 방식으로 Spark 컨테이너 수명을 관리합니다.
작업 매개 변수 읽기
Databricks는 JSON 문자열 배열로 JAR 작업에 매개 변수를 전달합니다. 이러한 매개 변수에 액세스하려면 String 함수에 전달된 main 배열을 검사합니다.
매개 변수에 대한 자세한 내용은 매개 변수화 작업을 참조하세요.
추가 구성
컴퓨팅 유형에 따라 추가 구성이 필요할 수 있습니다.
- 표준 액세스 모드: 보안상의 이유로 관리자는 JAR 라이브러리의 Maven 좌표와 경로를 허용 목록에 추가해야 합니다.
- 서버리스 컴퓨팅: 작업이 개인 리소스(데이터베이스, API, 스토리지)에 액세스하는 경우 NCC(네트워크 연결 구성)를 사용하여 네트워킹을 구성합니다. 서버리스 네트워크 보안을 참조하세요.
다음 단계
- 작업에서 jar을 사용하는 방법을 알아봅니다.
- Databricks Connect에 대해 알아봅니다.
- Databricks의 Scala에 대해 알아봅니다.