ビジネスロジックを含む JAR パッケージを作成し、ビルドします。アップロード後、Spark JAR ジョブを開発できます。このトピックでは、2 つの例を用いて、これらのジョブの開発とデプロイ方法を説明します。
前提条件
-
ワークスペースを作成済みであること。詳細については、「ワークスペースの管理」をご参照ください。
-
ビジネスアプリケーションを開発し、JAR パッケージにビルド済みであること。
操作手順
ステップ 1: JAR パッケージの開発
EMR Serverless Spark は、JAR 開発のための統合開発環境 (IDE) を提供していません。ローカルまたはスタンドアロンの開発環境で Spark アプリケーションをコーディングし、JAR ファイルにパッケージ化する必要があります。
Maven プロジェクトの pom.xml ファイルに、必要な Spark の依存関係を追加します。EMR 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 コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
Spark ページで、対象のワークスペースの名前をクリックします。
-
EMR Serverless Spark ページの左側のナビゲーションウィンドウで、Artifacts をクリックします。
-
Artifacts ページで、Upload File をクリックします。
-
Upload File ダイアログボックスで、アップロードエリアをクリックしてローカルの JAR パッケージを選択するか、パッケージをアップロードエリアにドラッグします。
この例では、SparkExample-1.0-SNAPSHOT.jar を使用します。
ステップ 3: ジョブの開発と実行
-
EMR Serverless Spark ページの左側のナビゲーションウィンドウで、Development をクリックします。
-
Development タブで、
アイコンをクリックします。 -
名前を入力し、タイプとして を選択してから、OK をクリックします。
-
右上隅で、リソースキューを選択します。
キューの追加方法の詳細については、「リソースキューの管理」をご参照ください。
-
新しいジョブエディターで、次のパラメーターを設定します。残りはデフォルト設定のままにして、実行 をクリックします。
パラメーター
説明
Main JAR Resource
アップロードした JAR パッケージを選択します。この例では、SparkExample-1.0-SNAPSHOT.jar を使用します。
Main Class
Spark ジョブで実行するメインクラスです。
-
円周率の近似値を計算するには、
org.example.JavaSparkPiと入力します。 -
Hive テーブルをクエリするには、
org.example.HiveTableAccessと入力します。
-
-
ジョブが完了したら、下部にある Execution Records セクションに移動し、[操作] 列の [ログ] をクリックします。
[ログ] パネルで、[ドライバーログ] > [Stdout] を選択します。出力
Pi is roughly 3.1403は、Spark ジョブが正常に実行されたことを示します。テーブルクエリの出力例は、
id=1, name=jayという 1 つのレコードを含むフォーマットされたテーブルです。
ステップ 4: ジョブの公開
公開されたジョブは、ワークフロー内のタスクとして使用できます。
-
ジョブが完了したら、右側の Publish をクリックします。
-
表示されるダイアログボックスで、公開情報を入力し、OK をクリックします。
(オプション) ステップ 5: Spark UI の表示
ジョブの実行後、Spark UI でその実行詳細を表示できます。
-
左側のナビゲーションウィンドウで、Job History をクリックします。
-
[アプリケーション] ページで、対象のジョブを見つけ、[操作] 列の Spark UI をクリックします。
-
ページには、ユーザー:
root、スケジューリングモード:FIFO、完了したジョブ:1などの詳細が表示されます。ジョブエントリには、ID 0、説明reduce at SparkPi.scala:38、持続時間 4 秒、ステージ (1/1) とタスク (2/2) の進捗が表示されます。これらの詳細から、Spark 円周率ジョブが正常に実行されたことが確認できます。
関連ドキュメント
ジョブを公開した後、ワークフローのタスクとして使用できます。詳細については、「ワークフローの管理」をご参照ください。完全なジョブオーケストレーションの例については、「SparkSQL 開発のクイックスタート」をご参照ください。