サーバレス コンピュートでScalaとJava JAR を作成して実行する
ベータ版
ScalaとJava Job はベータ版です。 JAR タスクを使用して JAR をデプロイできます。まだ有効になっていない場合は、 「Databricks プレビューの管理」を参照してください。
Java アーカイブ(JAR) は、Java または Scala コードを 1 つのファイルにパッケージ化します。この記事では、 Sparkコードを使用してJARを作成し、それをサーバレスコンピュートにLakeFlow Jobとしてデプロイする方法を示します。
自動デプロイと継続的インテグレーション ワークフローの場合は、Databricks アセット バンドルを使用して、事前に構成されたビルドおよびデプロイ設定を含むテンプレートからプロジェクトを作成します。Databricksアセット バンドルを使用してScala JARをビルドする」およびJARファイルをUnity Catalogにアップロードするバンドル」を参照してください。 この記事では、JAR がサーバレス コンピュートでどのように動作するかをデプロイするための手動のアプローチ、または学習について説明します。
要件
ローカル開発環境には以下が必要です。
- sbt 1.11.7 以上 (Scala JAR の場合)
- Maven 3.9.0 以上(Java JAR の場合)
- サーバー環境に一致する JDK、 Scala 、およびDatabricks Connectバージョン (この例では、JDK 17、 Scala 2.13.16、およびDatabricks Connect 17.0.1 を使用しています)
ステップ 1. JARを構築する
- Scala
- Java
-
新しい Scala プロジェクトを作成するには、次のコマンドを実行します。
Bashsbt new scala/scala-seed.g8プロンプトが表示されたら、プロジェクト名(例:
my-spark-appを入力します。 -
build.sbtファイルの内容を次の内容に置き換えます。scalaVersion := "2.13.16"
libraryDependencies += "com.databricks" %% "databricks-connect" % "17.0.1"
// other dependencies go here...
// to run with new jvm options, a fork is required otherwise it uses same options as sbt process
fork := true
javaOptions += "--add-opens=java.base/java.nio=ALL-UNNAMED" -
project/assembly.sbtファイルを編集または作成し、次の行を追加します。addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.3.1") -
src/main/scala/example/DatabricksExample.scalaにメインクラスを作成します:Scalapackage com.examples
import org.apache.spark.sql.SparkSession
object SparkJar {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().getOrCreate()
// Prints the arguments to the class, which
// are job parameters when run as a job:
println(args.mkString(", "))
// Shows using spark:
println(spark.version)
println(spark.range(10).limit(3).collect().mkString(" "))
}
} -
JAR ファイルをビルドするには、次のコマンドを実行します。
Bashsbt assembly
-
新しい Maven プロジェクト構造を作成するには、次のコマンドを実行します。
Bash# Create all directories at once
mkdir -p my-spark-app/src/main/java/com/examples
cd my-spark-app -
プロジェクト ルートに次の内容の
pom.xmlファイルを作成します。XML<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.examples</groupId>
<artifactId>my-spark-app</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<scala.binary.version>2.13</scala.binary.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.databricks</groupId>
<artifactId>databricks-connect_${scala.binary.version}</artifactId>
<version>17.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.examples.SparkJar</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> -
src/main/java/com/examples/SparkJar.javaにメインクラスを作成します:Javapackage com.examples;
import org.apache.spark.sql.SparkSession;
import java.util.stream.Collectors;
public class SparkJar {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder().getOrCreate();
// Prints the arguments to the class, which
// are job parameters when run as a job:
System.out.println(String.join(", ", args));
// Shows using spark:
System.out.println(spark.version());
System.out.println(
spark.range(10).limit(3).collectAsList().stream()
.map(Object::toString)
.collect(Collectors.joining(" "))
);
}
} -
JAR ファイルをビルドするには、次のコマンドを実行します。
Bashmvn clean packageコンパイルされた JAR は
target/ディレクトリにmy-spark-app-1.0-SNAPSHOT.jarとして配置されます。
ステップ 2. JARを実行するジョブを作成する
-
ワークスペースで、サイドバーの
ジョブ & パイプライン をクリックします。
-
作成 をクリックし、 ジョブ をクリックします。
タスク タブは、空のタスクペインとともに表示されます。
LakeflowジョブUI が オン の場合は、 JAR タイルをクリックして最初のタスクを構成します。 JAR タイルが使用できない場合は、「 別のタスク・タイプの追加 」をクリックして「 JAR」 を検索します。
-
オプションで、ジョブの名前 (デフォルトは
New Job <date-time>) をジョブ名に置き換えます。 -
タスク 名 に、タスクの名前を入力します (例:
JAR_example)。 -
必要に応じて、「 タイプ 」ドロップダウン・メニューから「 JAR 」を選択します。
-
メインクラス には、Jar のパッケージとクラスを入力します。上記の例に従った場合は、
com.examples.SparkJarと入力します。 -
コンピュート の場合は、 「サーバレス」 を選択します。
-
サーバーレス環境を構成します。
- 環境を選択してクリック
編集 して設定します。
- 環境バージョン として 「4- Scala -preview」 を選択します。
- JARファイルをファイルセレクターにドラッグアンドドロップして追加するか、 Unity Catalogボリュームまたはワークスペースの場所から参照して選択します。
- 環境を選択してクリック
-
この例では、 パラメーター に
["Hello", "World!"]と入力します。 -
「 タスクを作成 」をクリックします。
ステップ 3: ジョブを実行し、ジョブ実行の詳細を表示します
をクリックしてワークフローを実行します。 実行の詳細 を表示するには、 トリガーされた実行 ポップアップで 実行の表示 をクリックするか、ジョブの実行ビューで実行の 開始時刻 列のリンクをクリックします。
実行が完了すると、タスクに渡された引数を含む出力が 出力 パネルに表示されます。
次のステップ
- JARタスクの詳細については、 「ジョブのJARタスク」を参照してください。
- 互換性のある JAR の作成の詳細については、 「Databricks 互換性のある JAR を作成する」を参照してください。
- ジョブの作成と実行の詳細については、Lakeflowジョブを参照してください。