このトピックでは、ECS インスタンスを EMR Serverless Spark に接続し、EMR Serverless spark-submit コマンドラインインターフェイス (CLI) を使用して Spark ジョブを開発する方法について説明します。
前提条件
Java 1.8 以降がインストールされている必要があります。
RAM ユーザーを使用して Spark ジョブを送信する場合は、その RAM ユーザーを Serverless Spark ワークスペースに追加し、Developer ロール以上の権限を付与する必要があります。詳細については、「ユーザーとロールの管理」をご参照ください。
操作手順
ステップ 1:EMR Serverless spark-submit CLI のダウンロードとインストール
emr-serverless-spark-tool-0.11.3-SNAPSHOT-bin.zip をクリックして、インストールパッケージをダウンロードします。
インストールパッケージをご利用の ECS インスタンスにアップロードします。詳細については、「ファイルのアップロードまたはダウンロード」をご参照ください。
次のコマンドを実行して、EMR Serverless spark-submit CLI を解凍・インストールします。
unzip emr-serverless-spark-tool-0.11.3-SNAPSHOT-bin.zip
ステップ 2:パラメーターの設定
Spark 対応環境で SPARK_CONF_DIR 環境変数が設定されている場合、構成ファイルを SPARK_CONF_DIR で指定されたディレクトリに配置してください。たとえば、EMR クラスターでは、このディレクトリは通常 /etc/taihao-apps/spark-conf です。これを行わないと、システムはエラーを返します。
次のコマンドを実行して、
connection.propertiesの構成を変更します。vim emr-serverless-spark-tool-0.11.3-SNAPSHOT/conf/connection.propertiesファイルを次のように構成します。
key=value形式を使用してください。例:accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID> accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> regionId=cn-hangzhou endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com workspaceId=w-xxxxxxxxxxxx重要この AccessKey に関連付けられた RAM ユーザーまたはロールには、RAM 権限付与が行われ、対応する Serverless Spark ワークスペースに追加されている必要があります。
RAM 権限付与の詳細については、「RAM ユーザーの権限付与」をご参照ください。
Serverless Spark ワークスペースのユーザーおよびロール管理の詳細については、「ユーザーとロールの管理」をご参照ください。
以下の表は、各パラメーターの説明です。
パラメーター
必須
説明
accessKeyId
はい
Spark ジョブの実行に使用する Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID および AccessKey Secret です。
重要accessKeyId および accessKeySecret パラメーターを設定する際は、その AccessKey に関連付けられたユーザーが、ワークスペースにバインドされた OSS バケットに対して読み取りおよび書き込み権限を持っていることを確認してください。ワークスペースにバインドされた OSS バケットを表示するには、Spark ページに移動し、[操作] 列の [詳細] をクリックします。
accessKeySecret
はい
regionId
はい
リージョン ID です。この例では中国 (杭州) リージョンを使用しています。
endpoint
はい
EMR Serverless Spark のエンドポイントです。エンドポイントの詳細については、「サービスエンドポイント」をご参照ください。
この例では、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。パラメーター値は
emr-serverless-spark.cn-hangzhou.aliyuncs.comです。説明ご利用の ECS インスタンスがパブリックネットワークにアクセスできない場合は、VPC エンドポイントを使用してください。
workspaceId
はい
EMR Serverless Spark ワークスペースの ID です。
ステップ 3:Spark ジョブの送信
次のコマンドを実行して、EMR Serverless spark-submit ツールディレクトリに移動します。
cd emr-serverless-spark-tool-0.11.3-SNAPSHOTジョブの種類に応じて送信方法を選択します。
ジョブを送信する際は、JAR パッケージや Python スクリプトなどの依存ファイルリソースを指定する必要があります。これらのリソースは、シナリオや要件に応じて OSS またはローカルに保存できます。このトピックでは、OSS リソースを例として使用します。
spark-submit の使用
spark-submitは、Spark の汎用ジョブ送信ツールです。Java/Scala ジョブおよび PySpark ジョブの両方に使用できます。Java または Scala ジョブ
この例では spark-examples_2.12-3.5.2.jar を使用します。spark-examples_2.12-3.5.2.jar をクリックしてテスト用 JAR パッケージをダウンロードし、OSS にアップロードしてください。この JAR パッケージは、円周率 (π) の値を計算する組み込みの Spark サンプルです。
説明esr-4.x エンジンバージョンでは spark-examples_2.12-3.5.2.jar を使用する必要があります。esr-5.x エンジンバージョンを使用する場合は、このトピックでの検証用に spark-examples_2.13-4.0.1.jar をダウンロードしてください。
./bin/spark-submit --name SparkPi \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --class org.apache.spark.examples.SparkPi \ oss://<yourBucket>/path/to/spark-examples_2.12-3.5.2.jar \ 10000PySpark ジョブ
この例では DataFrame.py および employee.csv を使用します。DataFrame.py および employee.csv をクリックしてテストファイルをダウンロードし、OSS にアップロードしてください。
説明DataFrame.py ファイルには、Apache Spark フレームワークを使用して OSS 内のデータを処理するコードが含まれています。
employee.csv ファイルには、従業員名、部署、給与などのデータリストが含まれています。
./bin/spark-submit --name PySpark \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --conf spark.tags.key=value \ oss://<yourBucket>/path/to/DataFrame.py \ oss://<yourBucket>/path/to/employee.csvパラメーターの説明は次のとおりです。
サポートされるオープンソースパラメーター
パラメーター名
例
説明
--name
SparkPi
Spark ジョブのアプリケーション名を識別用に指定します。
--class
org.apache.spark.examples.SparkPi
Java または Scala プログラムのエントリクラス名を指定します。Python プログラムではこのパラメーターを使用しないでください。
--num-executors
5
Spark ジョブのエグゼキュータ数です。
--driver-cores
1
Spark ドライバーに割り当てる CPU コア数です。
--driver-memory
1g
Spark ドライバーに割り当てるメモリ量です。
--executor-cores
2
各エグゼキュータに割り当てる CPU コア数です。
--executor-memory
2g
各エグゼキュータに割り当てるメモリ量です。
--files
oss://<yourBucket>/file1,oss://<yourBucket>/file2
Spark ジョブが参照するリソースファイルです。OSS リソースまたはローカルファイルを指定できます。複数のファイルを指定する場合は、カンマ (,) で区切ります。
--py-files
oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py
Spark ジョブが参照する Python スクリプトです。OSS リソースまたはローカルファイルを指定できます。複数のファイルを指定する場合は、カンマ (,) で区切ります。このパラメーターは PySpark ジョブにのみ適用されます。
--jars
oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar
Spark ジョブが参照する JAR パッケージです。OSS リソースまたはローカルファイルを指定できます。複数のファイルを指定する場合は、カンマ (,) で区切ります。
--archives
oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip
Spark ジョブが参照するアーカイブパッケージです。OSS リソースまたはローカルファイルを指定できます。複数のファイルを指定する場合は、カンマ (,) で区切ります。
--queue
root_queue
Spark ジョブを実行するキューです。キュー名は、EMR Serverless Spark ワークスペースのキュー管理で設定されたものと一致している必要があります。
--proxy-user
test
指定された値により、
HADOOP_USER_NAME環境変数が上書きされます。この動作はオープンソース版と一致します。--conf
spark.tags.key=value
Spark ジョブのカスタムパラメーターです。
--status
jr-8598aa9f459d****
Spark ジョブのステータスを確認します。
--kill
jr-8598aa9f459d****
Spark ジョブを停止します。
拡張非オープンソースパラメーター
パラメーター名
例
説明
--detach
N/A
ジョブを送信後、spark-submit はジョブのステータスを待機または確認せずにすぐに終了します。
--detail
jr-8598aa9f459d****
Spark ジョブの詳細を表示します。
--release-version
esr-4.1.1 (Spark 3.5.2, Scala 2.12)
Spark バージョンを指定します。コンソールに表示されるエンジンバージョンを使用してください。
--enable-template
N/A
テンプレート機能を有効にします。ジョブはワークスペースのデフォルト構成テンプレートを使用します。
構成管理 で 構成テンプレート を作成した場合は、
--confでspark.emr.serverless.templateIdパラメーターを設定してテンプレート ID を指定してください。ジョブは指定されたテンプレート ID を直接適用します。テンプレートの作成方法の詳細については、「構成管理」をご参照ください。--enable-templateのみを指定した場合、ジョブは自動的にワークスペースのデフォルト構成テンプレートを適用します。--confでのみテンプレート ID を指定した場合、ジョブは指定されたテンプレート ID を直接適用します。--enable-templateと--confの両方を指定した場合:--enable-templateと--conf spark.emr.serverless.templateIdの両方を指定すると、--confで指定されたテンプレート ID がデフォルトテンプレートを上書きします。いずれのパラメーターも指定しなかった場合:
--enable-templateも--conf spark.emr.serverless.templateIdも指定しない場合、ジョブはテンプレート構成を適用しません。
--timeout
60
ジョブのタイムアウト期間(秒単位)です。
--workspace-id
w-4b4d7925a797****
ジョブレベルでワークスペース ID を指定します。これにより、
connection.propertiesファイル内のworkspaceIdパラメーターがオーバーライドされます。サポートされないオープンソースパラメーター
--deploy-mode
--master
--repositories
--keytab
--principal
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
--verbose
spark-sql の使用
spark-sqlは、SQL クエリまたはスクリプトを実行するために特別に設計されたツールです。SQL 文を直接実行するシナリオに適しています。例 1:SQL 文を直接実行
spark-sql -e "SHOW TABLES"このコマンドは、現在のデータベース内のすべてのテーブルを一覧表示します。
例 2:SQL スクリプトファイルを実行
spark-sql -f oss://<yourBucketname>/path/to/your/example.sqlこの例では example.sql を使用します。example.sql をクリックしてテストファイルをダウンロードし、OSS にアップロードしてください。
以下の表は、各パラメーターの説明です。
パラメーター名
例
説明
-e "<sql>"-e "SELECT * FROM table"コマンドラインで SQL 文をインライン実行します。
-f <path>-f oss://path/script.sql指定されたパスの SQL スクリプトファイルを実行します。
ステップ 4:Spark ジョブの照会
CLI の使用
Spark ジョブのステータスの照会
cd emr-serverless-spark-tool-0.11.3-SNAPSHOT
./bin/spark-submit --status <jr-8598aa9f459d****>Spark ジョブの詳細の照会
cd emr-serverless-spark-tool-0.11.3-SNAPSHOT
./bin/spark-submit --detail <jr-8598aa9f459d****>UI 方式
[EMR Serverless Spark] ページで、左側のナビゲーションウィンドウから [ジョブ履歴] をクリックします。
[ジョブ履歴] ページで、[開発ジョブ] タブをクリックして、送信されたジョブを表示します。

(オプション)ステップ 5:Spark ジョブの停止
cd emr-serverless-spark-tool-0.11.3-SNAPSHOT
./bin/spark-submit --kill <jr-8598aa9f459d****>実行中 (Running) 状態のジョブのみ停止できます。
よくある質問
spark-submit ツールを使用してバッチジョブを送信する際に、ネットワーク接続をどのように指定すればよいですか?
まずネットワーク接続を準備してください。詳細については、「ネットワーク接続の追加」をご参照ください。
spark-submit コマンドで
--confを使用してネットワーク接続を指定します。--conf spark.emr.serverless.network.service.name=<networkname><networkname> は、実際の接続名に置き換えてください。