StartJobRun API による Spark SQL スクリプトの実行 - Amazon EMR

StartJobRun API による Spark SQL スクリプトの実行

Amazon EMR on EKS リリース 6.7.0 以降には Spark SQL ジョブドライバーが含まれているため、StartJobRun API を使用して Spark SQL スクリプトを実行できます。SQL エントリポイントファイルを提供することで、既存の Spark SQL スクリプトを変更することなく、StartJobRun API を使用して Amazon EMR on EKS で Spark SQL クエリを直接実行できます。以下の表は、StartJobRun API を使用して Spark SQL ジョブでサポートされている Spark パラメータの一覧です。

Spark SQL ジョブに送信するパラメータは、以下の Spark パラメータから選択できます。これらのパラメータを使用して、Spark プロパティのデフォルトを上書きします。

オプション 説明

--name NAME

アプリケーション名
--jars JARS ドライバーと実行クラスパスに含める jar のカンマ区切りリスト。
--packages ドライバーとエグゼキュータークラスパスに含める jar の Maven 座標のカンマ区切りリスト。
--exclude-packages –packages で提供される依存関係を解決する際に除外して、依存関係の競合を回避する groupId:artifactId のカンマ区切りリスト。
--repositories —packages で与えられた Maven 座標を検索するための追加のリモートリポジトリのカンマ区切りリスト。
--files FILES 各エグゼキューターの作業ディレクトリに配置されるファイルのカンマ区切りリスト。
--conf PROP=VALUE Spark 設定プロパティ。
--properties-file FILE 追加プロパティを読み込むファイルへのパス。
--driver-memory MEM ドライバー用メモリ。デフォルト 1024 MB。
--driver-java-options ドライバーに渡す追加の Java オプション。
--driver-library-path ドライバーに渡す追加のライブラリパスエントリ。
--driver-class-path ドライバーに渡す追加のクラスパスエントリ。
--executor-memory MEM エグゼキューターあたりのメモリ。デフォルト 1GB。
--driver-cores NUM ドライバーが使用するコアの数。
--total-executor-cores NUM すべてのエグゼキューターの合計コア。
--executor-cores NUM 各エグゼキューターが使用するコアの数。
--num-executors NUM 起動するエグゼキューターの数。
-hivevar <key=value> Hive コマンドに適用する変数置換。例: -hivevar A=B
-hiveconf <property=value> 指定したプロパティに使用する値。

Spark SQL ジョブの場合、start-job-run-request.json ファイルを作成し、以下の例に示すように、ジョブ実行に必要なパラメータを指定します。

{ "name": "myjob", "virtualClusterId": "123456", "executionRoleArn": "iam_role_name_for_job_execution", "releaseLabel": "emr-6.7.0-latest", "jobDriver": { "sparkSqlJobDriver": { "entryPoint": "entryPoint_location", "sparkSqlParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.driver.memory":"2G" } } ], "monitoringConfiguration": { "persistentAppUI": "ENABLED", "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group", "logStreamNamePrefix": "log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://my_s3_log_location" } } } }