このトピックでは、AnalyticDB for MySQL spark-submitを使用してSparkアプリケーションを開発する方法について説明します。 この例では、ECS (Elastic Compute Service) インスタンスがAnalyticDB for MySQLに接続されています。
背景情報
クライアントからAnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターに接続し、Sparkアプリケーションを開発する場合、sparkアプリケーションを送信するにはAnalyticDB for MySQL Spark-submitを使用する必要があります。
AnalyticDB for MySQL spark-submitは、Spark SQLアプリケーションではなく、Sparkバッチアプリケーションの送信に使用できます。
前提条件
Java Development Kit (JDK) V1.8以降がインストールされています。
AnalyticDB for MySQLをダウンロードしてインストールしますspark-submit
次のコマンドを実行して、AnalyticDB for MySQL spark-submitのインストールパッケージをダウンロードします。 ファイル名は
adb-spark-toolkit-submit-0.0.1.tar.gz
です。wget https://dla003.oss-cn-hangzhou.aliyuncs.com/adb-spark-toolkit-submit-0.0.1.tar.gz
次のコマンドを実行してパッケージを抽出し、AnalyticDB for MySQLspark-submit。
tar zxvf adb-spark-toolkit-submit-0.0.1.tar.gz
パラメーターの設定
AnalyticDB for MySQL Sparkバッチアプリケーションの設定パラメーターは、conf/spark-defaults.conf
ファイルで、またはコマンドを呼び出して変更できます。 conf/spark-defaults.conf
ファイルで設定パラメーターを変更することを推奨します。 変更後、AnalyticDB for MySQL spark-submitは自動的に設定ファイルを読み取ります。 CLIを使用して設定パラメーターを変更する場合、設定ファイルのパラメーターは上書きされませんが、コマンドの設定が優先されます。
AnalyticDB for MySQL spark-submitをインストールした後、次のコマンドを実行して
adb-spark-toolkit-submit/conf/spark-defaults.conf
ファイルを開きます。vim adb-spark-toolkit-submit/conf/spark-defaults.conf
パラメーターを
key=value
形式で設定します。 例:keyId = yourAkId secretId = yourAkSec regionId = cn-hangzhou clusterId = amv-bp15f9q95p **** rgName = sg-デフォルト ossUploadPath = oss://<bucket_name>/sparkjars / spark.driver.resourceSpec = medium spark.exe cutor.instances = 2 spark.exe cutor.resourceSpec = medium spark.adb.roleArn = arn:1234567/adbsparkprocessrole spark.adb.eni.vswitchId = vsw-defaultswitch spark.adb.eni.securityGroupId = sg-defaultgroup spark.app.log.rootPath = oss://<bucket_name>/sparklogs/
重要サンプル値を実際の値に置き換える必要があります。
この例では、keyId、secretId、regionId、clusterId、rgName、ossKeyId、およびossUploadPathパラメーターは、Apache sparkではなくAnalyticDB for MySQL Spark-submitでのみサポートされます。 パラメーターの詳細については、このトピックの「パラメーター」を参照してください。
Sparkジョブを
-- key1 value1 -- key2 value2
形式で送信するためのコマンドでパラメーターを設定できます。 AnalyticDB for MySQL SparkConfを使用してパラメーターを設定することもできます。 詳細については、このトピックの「構成の互換性」セクションを参照してください。サンプルコードのその他のパラメーター、またはAnalyticDB For MySQL spark-submitでサポートされているすべての設定パラメーターについては、「Sparkアプリケーション設定パラメーター」をご参照ください。
表 1 Parameters パラメーター
説明
必須
keyId
Sparkジョブの実行に使用されるAlibaba CloudアカウントまたはRAM (Resource Access Management) ユーザーのAccessKey ID。 AccessKey IDの表示方法については、「アカウントと権限」をご参照ください。
可
secretId
Sparkジョブの実行に使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。
可
regionId
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターが存在するリージョンのID。
可
clusterId
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターのID。
可
rgName
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターのリソースグループ。
可
ossKeyId
Object Storage Service (OSS) バケットの作成に使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKey ID。
設定でOSSディレクトリを指定すると、オンプレミスストレージ内のJARパッケージをOSSディレクトリに自動的にアップロードできます。
任意
ossSecretId
OSSバケットの作成に使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。
任意
ossEndpoint
OSSバケットの内部エンドポイント。 OSSリージョンとエンドポイント間のマッピングについては、「リージョンとエンドポイント」をご参照ください。
任意
ossUploadPath
JARパッケージがアップロードされるOSSディレクトリ。
任意
構成の互換性
オープンソースのspark-submitとの互換性を確保するために、keyId、secretId、regionId、clusterId、rgName、ossKeyId、およびossUploadPathパラメーターは、次の形式のAnalyticDB for MySQL SparkConfを使用して設定できます。
-- 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ジョブを送信する
次のコマンドを実行して、AnalyticDB for MySQL spark-submitのディレクトリを開きます。
cd adb-spark-toolkit-submit
次の形式でジョブを送信します。
. /bin/spark-submit \ -- class com.aliyun.spark.oss.SparkReadOss \ -- verbose \ -- name <your_job_name> \ -- jars oss://<bucket-name>/jars/xxx.jar,oss://<bucket-name>/jars/xxx.jar \ -- conf spark.driver.resourceSpec=medium \ -- conf spark.exe cutor.instances=1 \ -- conf spark.exe cutor.resourceSpec=medium \ oss://<bucket-name>/jars/xxx.jar args0 args1
説明Sparkジョブを送信すると、次のいずれかのレスポンスコードが返されます。
255: ジョブが失敗しました。
0: ジョブが正常に実行されました。
143: ジョブが終了しました。
下表に、各パラメーターを説明します。
パラメーター | 例 | 説明 |
-- class | <class_name> | JavaまたはScalaアプリケーションのエントリポイント。 Pythonアプリケーションにはエントリポイントは必要ありません。 |
-- verbose | なし | Sparkジョブの送信中に生成されたログを表示します。 |
-- name | <spark_name> | Sparkアプリケーションの名前。 |
-- 瓶 | <jar_name> | Sparkアプリケーションに必要なJARパッケージの絶対パス。 複数のJARパッケージをコンマ (,) で区切ります。
説明 OSSディレクトリにアクセスする権限があることを確認してください。 RAMコンソールにログインし、[ユーザー] ページのRAMユーザーにAliyunOSSFullAccess権限を付与できます。 |
-- conf | <key=value> | Sparkアプリケーションの設定パラメーター。 AnalyticDB for MySQL spark-submitの設定は、オープンソースのspark-submitと非常によく似ています。 異なるパラメーターとAnalyticDB For MySQL spark-submitに固有のパラメーターについては、このトピックの「AnalyticDB for MySQL spark-submit」セクションおよびSparkアプリケーション設定パラメーターをご参照ください。 説明
|
oss:// <バケット名>/jars/xxx.jar | <oss_path> | Sparkアプリケーションのメインファイルの絶対パス。 メインファイルは、エントリポイントを含むJARパッケージ、またはPythonプログラムのエントリポイントとして機能する実行可能ファイルです。 説明 SparkアプリケーションのメインファイルをOSSに保存する必要があります。 |
args | <args0 args1> | JARパッケージに必要なパラメーター。 複数ある場合は、パラメーターをスペースで区切ります。 |
Sparkジョブのリストを照会する
. /bin/spark-submit -- list -- clusterId <cluster_Id> -- rgName <ResourceGroup_name> -- pagenumber 1 -- ページサイズ3
Sparkジョブのステータスの照会
. /bin/spark-submit -- status <appId>
Sparkジョブの一覧からジョブのappIdを取得できます。 詳細については、このトピックの「Sparkジョブの一覧の照会」を参照してください。
Sparkジョブのステータスの詳細については、「SparkAppInfo」をご参照ください。
送信されたジョブとSparkUIのパラメーターの照会
. /bin/spark-submit -- detail <appId>
Sparkジョブの一覧からジョブのappIdを取得できます。 詳細については、このトピックの「Sparkジョブの一覧の照会」を参照してください。
返された結果のSpark WEB UIフィールドは、Spark UIアドレスを示します。
Sparkジョブのログを照会します。
. /bin/spark-submit -- get-log <appId>
Sparkジョブの一覧からジョブのappIdを取得できます。 詳細については、このトピックの「Sparkジョブの一覧の照会」を参照してください。
Sparkジョブを終了する
. /spark-submit -- kill <appId>
Sparkジョブの一覧からジョブのappIdを取得できます。 詳細については、このトピックの「Sparkジョブの一覧の照会」を参照してください。
AnalyticDB for MySQL spark-submitとオープンソースのspark-submitの違い
AnalyticDB for MySQL sparkに固有のパラメーター-submit
パラメーター | 説明 |
-- api-retry-times | AnalyticDB for MySQL spark-submitがコマンドの実行に失敗した場合に許可される再試行の最大数。 Sparkジョブを送信するコマンドは再試行されません。 これは、ジョブの送信がべき等操作ではないためです。 ネットワークのタイムアウトなどの理由で失敗した送信は、実際にバックグラウンドで成功した可能性があります。 したがって、ジョブ送信コマンドを再試行すると、送信が重複する可能性があります。 ジョブが正常に送信されたかどうかを確認するには、 |
-- タイムアウト秒 | コマンドが再試行されるまでのAnalyticDB for MySQL spark-submitのタイムアウト期間。 単位は秒です。 デフォルト値は 10 です。 |
-- enable-inner-endpoint | ECSインスタンスからSparkジョブを送信するときに、このパラメーターを指定して、AnalyticDB for MySQL spark-submitが仮想プライベートクラウド (VPC) 内のサービスにアクセスできるようにします。 重要 VPC内のサービスアクセスをサポートするリージョンは、中国 (杭州) 、中国 (上海) 、中国 (深セン) のみです。 |
-- リスト | ジョブのリストを取得します。 ほとんどの場合、このパラメーターは たとえば、最初のページで5つのジョブを表示する場合は、次のようにパラメーターを設定できます。
|
-- pagenumber | ページ番号。 デフォルト値は 1 です。 |
-- pagesize | 各ページで返すジョブの最大数。 デフォルト値は 10 です。 |
-殺す | ジョブを終了します。 |
-- get-log | アプリケーションのログ。 |
-- status | アプリケーションに関する詳細。 |
オープンソースsparkに固有のパラメータ-submit
AnalyticDB for MySQL spark-submitは、オープンソースのspark-submitの設定パラメーターをサポートしていません。 詳細については、Sparkアプリケーションの設定パラメータートピックの「AnalyticDB For MySQLでサポートされていない設定パラメーター」をご参照ください。