ビジネスロジックを含む JAR パッケージをビルドし、アップロードして Spark JAR ジョブを開発できます。このトピックでは、JAR ジョブを開発およびデプロイする方法の 2 つの例を示します。
前提条件
ワークスペースが作成されていること。詳細については、「ワークスペース管理」をご参照ください。
ビジネスアプリケーションが開発され、JAR ファイルにパッケージ化されていること。
手順
ステップ 1: JAR パッケージを開発する
E-MapReduce (EMR) Serverless Spark は、JAR パッケージ用の統合開発環境 (IDE) を提供していません。したがって、ローカルまたはスタンドアロンの開発プラットフォームで Spark アプリケーションコードを記述し、JAR ファイルにパッケージ化する必要があります。このトピックでは、2 つの例を示します。
Maven プロジェクトの pom.xml ファイルに、Spark 関連の依存関係を追加する必要があります。Serverless Spark ランタイム環境にはこれらの依存関係が組み込まれているため、scope を provided に設定できます。これにより、コンパイルおよびテストフェーズ中に依存関係が利用可能であることを保証しつつ、重複したパッケージングやバージョンの競合を防ぐことができます。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>DLF テーブルのクエリ
public class HiveTableAccess {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.appName("DlfTableAccessExample")
.enableHiveSupport()
.getOrCreate();
spark.sql("SELECT * FROM test_table").show();
spark.stop();
}
}円周率 (π) の近似値を計算する
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SparkSession;
import java.util.ArrayList;
import java.util.List;
/**
* 円周率の近似値を計算します
* 使用法: JavaSparkPi [partitions]
*/
public final class JavaSparkPi {
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession
.builder()
.appName("JavaSparkPi")
.getOrCreate();
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2;
int n = 100000 * slices;
List<Integer> l = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
l.add(i);
}
JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);
int count = dataSet.map(integer -> {
double x = Math.random() * 2 - 1;
double y = Math.random() * 2 - 1;
return (x * x + y * y <= 1) ? 1 : 0;
}).reduce((integer, integer2) -> integer + integer2);
System.out.println("Pi is roughly " + 4.0 * count / n);
spark.stop();
}
}SparkExample-1.0-SNAPSHOT.jar をクリックして、テスト JAR パッケージをダウンロードします。
ステップ 2: JAR パッケージをアップロードする
ファイルアップロードページに移動します。
EMR コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[Spark] ページで、対象のワークスペースの名前をクリックします。
EMR Serverless Spark ページで、左側のナビゲーションウィンドウにある [ファイル] をクリックします。
[ファイル] ページで、[ファイルのアップロード] をクリックします。
[ファイルのアップロード] ダイアログボックスで、アップロードエリアをクリックしてローカルの JAR パッケージを選択するか、JAR パッケージをエリアにドラッグします。
この例では、SparkExample-1.0-SNAPSHOT.jar パッケージがアップロードされます。
ステップ 3: ジョブを開発して実行する
EMR Serverless Spark ページで、左側のナビゲーションウィンドウにある [データ開発] をクリックします。
[開発] タブで、
アイコンをクリックします。名前を入力し、タイプとして を選択し、[OK] をクリックします。
右上隅でキューを選択します。
キューの追加方法の詳細については、「リソースキューの管理」をご参照ください。
新しいジョブタブで、次のパラメーターを設定し、他のパラメーターはデフォルト値のままにして、[実行] をクリックします。
パラメーター
説明
メイン JAR リソース
前のステップでアップロードした JAR パッケージを選択します。この例では、SparkExample-1.0-SNAPSHOT.jar を選択します。
メインクラス
Spark ジョブを送信するときに指定されるメインクラス。
円周率 (π) の近似値を計算するには: この例では、
org.example.JavaSparkPiと入力します。Hive テーブルをクエリするには: この例では、
org.example.HiveTableAccessと入力します。
ジョブが実行された後、[実行記録] セクションで、[アクション] 列の [ログプローブ] をクリックしてログ情報を表示します。


ステップ 4: ジョブを公開する
公開されたジョブは、ワークフローのノードとして使用できます。
ジョブが完了したら、右上隅の [公開] をクリックします。
表示されるダイアログボックスにリリース情報を入力し、[OK] をクリックします。
(オプション) ステップ 5: Spark UI を表示する
ジョブが正常に実行された後、Spark UI でその実行詳細を表示できます。
左側のナビゲーションウィンドウで、[ジョブ履歴] をクリックします。
[アプリケーション] ページで、対象のジョブを見つけ、[アクション] 列の [Spark UI] をクリックします。
Spark ジョブページで、ジョブの詳細を表示できます。

参考資料
ジョブが公開された後、ワークフローのスケジューリングに使用できます。詳細については、「ワークフローの管理」をご参照ください。ジョブオーケストレーションの完全な開発プロセスの例については、「SparkSQL 開発の開始」をご参照ください。