AnalyticDB for MySQL の spark-submit コマンドラインツールを使用すると、クライアントから Spark JAR アプリケーションを送信および管理できます。本トピックでは、このツールのインストール、構成設定、Spark JAR アプリケーションの送信、および実行中のジョブの管理方法について説明します。
制限事項
spark-submit ツールは Spark JAR アプリケーションのみをサポートしており、Spark SQL アプリケーションは送信できません。
送信操作は冪等でないため、失敗時にコマンドが自動的に再試行されません。ネットワークタイムアウトにより一見失敗したように見えるコマンドでも、実際にはすでに成功している可能性があります。送信が成功したかどうかを確認するには、
--listオプションを使用するか、AnalyticDB for MySQL コンソールで確認してください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
AnalyticDB for MySQL Data Lakehouse Edition クラスター
ジョブ リソースグループ。詳細については、「リソースグループの作成と管理」をご参照ください。
クラスターと同じリージョンにある Object Storage Service (OSS) バケット
クライアントマシンに Java 開発キット(JDK)1.8 以降がインストール済みであること
spark-submit のインストール
インストールパッケージをダウンロードします。
wget https://dla003.oss-cn-hangzhou.aliyuncs.com/adb-spark-toolkit-submit-0.0.1.tar.gzパッケージを解凍します。
tar zxvf adb-spark-toolkit-submit-0.0.1.tar.gz
spark-submit の構成設定
パッケージを解凍した後、adb-spark-toolkit-submit/conf/spark-defaults.conf を開きます。spark-submit スクリプトはこのファイルを自動的に読み込み、設定内容はすべての Spark アプリケーションに適用されます。
vim adb-spark-toolkit-submit/conf/spark-defaults.conf以下の表に、構成パラメーターを示します。
| パラメーター | 必須 | 説明 |
|---|---|---|
keyId | はい | AnalyticDB for MySQL へのアクセス権限を持つ Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ID。詳細については、「アカウントと権限」をご参照ください。 |
secretId | はい | Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。詳細については、「アカウントと権限」をご参照ください。 |
regionId | はい | AnalyticDB for MySQL クラスターのリージョン ID。 |
clusterId | はい | AnalyticDB for MySQL クラスターの ID。 |
rgName | はい | Spark アプリケーションの実行に使用するジョブリソースグループの名前。 |
ossKeyId | いいえ | OSS へのアクセスに使用する AccessKey ID。オンプレミスに保存されている JAR ファイルを OSS にアップロードする場合に必要です。RAM ユーザーには AliyunOSSFullAccess 権限が必要です。 |
ossSecretId | いいえ | OSS へのアクセスに使用する AccessKey Secret。ossKeyId と共に指定する必要があります。 |
ossUploadPath | いいえ | オンプレミスの JAR ファイルをアップロードする OSS パス。ossKeyId と共に指定する必要があります。 |
conf | いいえ | key:value 形式の追加 Spark 構成パラメーター。複数のパラメーターを指定する場合はカンマで区切ります。利用可能なパラメーターの一覧については、「Spark アプリケーションの構成パラメーター」をご参照ください。 |
互換性
オープンソースの Spark-Submit との互換性を維持するため、AnalyticDB for MySQL Spark Conf に以下のパラメーターを設定することもできます:keyId、secretId、regionId、clusterId、rgName、ossKeyId、および ossUploadPath。これらのパラメーターはオープンソースの Spark 構成には含まれません。Conf 形式でこれらのパラメーターを構成する場合は、以下のコードに示す名前を使用する必要があります。
--conf spark.adb.access.key.id=<value>
--conf spark.adb.access.secret.id=<value>
--conf spark.adb.regionId=<value>
--conf spark.adb.clusterId=<value>
--conf spark.adb.rgName=<value>
--conf spark.adb.oss.akId=<value>
--conf spark.adb.oss.akSec=<value>
--conf spark.adb.oss.endpoint=<value>
--conf spark.adb.oss.uploadPath=<value>Spark アプリケーションの送信
Spark アプリケーションの JAR ファイルを OSS にアップロードします。詳細については、「シンプルアップロード」をご参照ください。
spark-submit ディレクトリに移動します。
cd adb-spark-toolkit-submitSpark アプリケーションを送信します。プレースホルダーの値を、ご利用の実際の OSS パスおよびリソース名に置き換えてください。
./bin/spark-submit \ --class com.aliyun.spark.oss.SparkReadOss \ --verbose \ --name Job1 \ --jars oss://<bucket-name>/jars/test.jar,oss://<bucket-name>/jars/search.jar \ --conf spark.driver.resourceSpec=medium \ --conf spark.executor.instances=1 \ --conf spark.executor.resourceSpec=medium \ oss://<bucket-name>/jars/test1.jar args0 args1プレースホルダーを以下のように置き換えます。
プレースホルダー 説明 <bucket-name>JAR ファイルを格納する OSS バケットの名前 args0 args1JAR ファイルの引数(スペース区切り)
アプリケーションを送信した後、以下のいずれかのリターンコードが返されます。
| リターンコード | 意味 |
|---|---|
0 | アプリケーションが正常に実行された |
255 | アプリケーションの実行に失敗した |
143 | アプリケーションが終了された |
上記コマンドで使用される spark-submit パラメーターについて、以下の表に説明を示します。
| パラメーター | 説明 |
|---|---|
--class | Java または Scala アプリケーションのメインクラス。Python アプリケーションの場合は不要です。 |
--verbose | 送信中に生成されたログを出力します。 |
--name | Spark アプリケーションの名前。 |
--jars | アプリケーションが依存する追加の JAR ファイルの、絶対 OSS パス(カンマ区切り)。オンプレミスのパスを指定した場合、ツールはそのファイルを ossUploadPath で構成された OSS パスにアップロードします。オンプレミスの JAR ファイルをアップロード中は、システムが MD5 チェックサムでファイルを検証します。同名かつ同一 MD5 値のファイルが既に OSS に存在する場合、アップロードはキャンセルされます。OSS 上で JAR ファイルを手動で更新した場合は、対応する MD5 チェックサムファイルを削除して、更新後のファイルがアップロードされるようにしてください。RAM ユーザーには AliyunOSSFullAccess 権限が必要です。 |
--conf | Spark 構成パラメーター。複数のパラメーターを指定する場合は、個別のフラグとして指定します:--conf key1=value1 --conf key2=value2。AnalyticDB for MySQL 固有のパラメーターについては、「オープンソースの spark-submit との違い」をご参照ください。 |
| メインファイルのパス | メイン JAR ファイル(Java/Scala の場合)またはエントリポイントスクリプト(Python の場合)の絶対 OSS パス。すべてのメインファイルは OSS 上に格納する必要があります。 |
args | JAR ファイルの引数(スペース区切り)。 |
Spark アプリケーションの管理
アプリケーションを送信した後は、以下の典型的なワークフローに従って操作を行います。
--listを実行し、アプリケーション ID を取得します。アプリケーション ID を用いて
--status、--get-log、または--detailを実行し、進行状況をモニターします。必要に応じて
--killを実行し、アプリケーションを停止します。
アプリケーションの一覧表示
ここで返されたアプリケーション ID を、他のすべての管理コマンドで使用します。
./bin/spark-submit --list \
--clusterId <cluster-ID> \
--rgName <resource-group-name> \
--pagenumber 1 \
--pagesize 3<cluster-ID> をご利用の AnalyticDB for MySQL クラスターの ID に、<resource-group-name> をジョブリソースグループの名前に置き換えてください。
アプリケーションのステータス確認
./bin/spark-submit --status <application-ID>送信詳細および Spark UI URL の表示
./bin/spark-submit --detail <application-ID>出力には、当該アプリケーションの Spark UI の URL が記載された Spark WEB UI フィールドが含まれます。
アプリケーションログの表示
./bin/spark-submit --get-log <application-ID>アプリケーションの終了
./bin/spark-submit --kill <application-ID>オープンソースの spark-submit との違い
AnalyticDB for MySQL の spark-submit 固有のパラメーター
以下のパラメーターは、AnalyticDB for MySQL の spark-submit ツールでのみ利用可能です。
| パラメーター | デフォルト | 説明 |
|---|---|---|
--api-retry-times | 3 | 失敗したコマンドの最大リトライ回数。送信コマンドはリトライされません — 詳細については、「制限事項」をご参照ください。 |
--time-out-seconds | 10 | 失敗したコマンドを再試行するまでのタイムアウト期間(秒単位)。 |
--enable-inner-endpoint | — | 仮想プライベートクラウド(VPC)内での内部ネットワークアクセスを有効化します。Elastic Compute Service(ECS)インスタンスからアプリケーションを送信する場合に使用します。 |
--list | — | 送信済みアプリケーションの一覧を表示します。--pagenumber および --pagesize と併用して、結果をページ分割できます。 |
--pagenumber | 1 | 一覧表示結果のページ番号。 |
--pagesize | 10 | 1 ページあたりに表示するアプリケーション数。 |
--kill | — | 指定されたアプリケーションを終了します。 |
--get-log | — | 指定されたアプリケーションのログを取得します。 |
--status | — | 指定されたアプリケーションのステータスを表示します。 |
AnalyticDB for MySQL の spark-submit でサポートされないパラメーター
一部のオープンソースの spark-submit パラメーターはサポートされていません。完全なリストについては、「Spark アプリケーションの構成パラメーター」トピックをご参照ください。