Alibaba Cloud E-MapReduce(EMR)では、カスタムリソース定義(CRD)を使用するか、spark-submit コマンドを実行するか、EMR コンソールでジョブを送信できます。このトピックでは、これらの方法を使用して Spark ジョブを送信する方法について説明します。
前提条件
EMR on ACK ページで Spark クラスタが作成されます。詳細については、「クラスタの作成」をご参照ください。
注意事項
このトピックでは、必要な JAR ファイルはイメージにパッケージ化されています。独自の JAR ファイルを使用している場合は、Alibaba Cloud Object Storage Service(OSS)に JAR ファイルをアップロードできます。ファイルのアップロード方法の詳細については、「簡単なアップロード」をご参照ください。
この場合、コマンドの local:///opt/spark/examples/spark-examples.jar を、JAR ファイルが OSS に保存されている実際のパスに置き換える必要があります。パスは、oss://<yourBucketName>/<path>.jar 形式で指定します。
Spark ジョブの送信
方法 1:CRD を使用して Spark ジョブを送信する
kubectl を使用して Alibaba Cloud Container Service for Kubernetes(ACK)クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
spark-pi.yaml という名前のジョブファイルを作成します。次のコードは、ファイルの内容を示しています。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi-simple spec: type: Scala sparkVersion: 3.2.1 mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///opt/spark/examples/spark-examples.jar" arguments: - "1000" driver: cores: 1 coreLimit: 1000m memory: 4g executor: cores: 1 coreLimit: 1000m memory: 8g memoryOverhead: 1g instances: 1コードのフィールドの詳細については、「spark-on-k8s-operator」を参照してください。
説明カスタムファイル名を指定できます。この例では、spark-pi.yaml が使用されています。
この例では、EMR V5.6.0 用の Spark 3.2.1 が使用されています。別のバージョンの Spark を使用する場合は、ビジネス要件に基づいて sparkVersion パラメータを設定します。
ジョブを送信するには、次のコマンドを実行します。
kubectl apply -f spark-pi.yaml --namespace <Namespace in which the cluster resides><Namespace in which the cluster resides>は、ビジネス要件に基づいて名前空間に置き換えます。名前空間を表示するには、EMR コンソールにログインし、[クラスタの詳細] タブに移動します。次の情報が返されます。
sparkapplication.sparkoperator.k8s.io/spark-pi-simple created説明spark-pi-simpleは、送信された Spark ジョブの名前です。オプション。 [ジョブの詳細] タブで、送信された Spark ジョブに関する情報を表示します。
方法 2:spark-submit コマンドを実行して Spark ジョブを送信する
kubectl を使用して Alibaba Cloud ACK クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
次のコマンドを実行して、EMR によって提供される emr-spark-ack ツールをインストールし、ツールに権限を付与します。
wget https://ecm-repo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/emr-on-ack/util/emr-spark-ack chmod 755 emr-spark-ackemr-spark-ack ツールを使用して Spark ジョブを送信します。
構文:
./emr-spark-ack -n <Namespace in which the cluster resides> <Spark command>説明<Spark command>は、Spark が必要とするモードに基づいて、spark-submit、spark-sql、spark-shell、または pyspark コマンドに置き換えることができます。クラスタモード:
spark-submit コマンドを実行して、spark-pi という名前のジョブを送信します。構文:
./emr-spark-ack -n <Namespace in which the cluster resides> spark-submit \ --name spark-pi-submit \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ local:///opt/spark/examples/spark-examples.jar \ 1000クライアントモード:
spark-sql コマンドを実行して Spark ジョブを送信します。構文:
# Prepare an SQL file on your on-premises machine. // オンプレミス マシンで SQL ファイルを準備します。 echo "select 1+1">test.sql # Submit a Spark job. // Spark ジョブを送信します。 ./emr-spark-ack -n <Namespace in which the cluster resides> spark-sql -f test.sqlEMR V5.X 用の Spark 3 以降では、emr-spark-ack ツールはオンプレミス ファイルの依存関係の自動アップロードをサポートしています。
--jars、--files、-fなどのフィールドで指定されたオンプレミス ファイルを含む、ジョブ送信コマンドのオンプレミス ファイルの依存関係は、Spark クラスタに自動的にアップロードできます。依存関係は、ACK クラスタで Spark ジョブを送信するために使用されます。次の図は、サンプルコードと返された情報を示しています。

spark-shell コマンドを実行して Spark ジョブを送信します。
./emr-spark-ack -n <Namespace in which the cluster resides> spark-shell次の図は、サンプルコードと返された情報を示しています。

オプション。 [ジョブの詳細] タブで、送信されたジョブに関する情報を表示します。
オプション。 emr-spark-ack ツールを使用して Spark ジョブを終了します。
構文:
./emr-spark-ack -n <Namespace in which the cluster resides> kill <Spark_app_id>説明emr-spark-ack ツールは、Spark ジョブを送信するときに、
<Spark_app_id>で指定された Spark アプリケーションの ID を生成します。出力ログで ID を表示できます。
方法 3:EMR コンソールで Spark ジョブを送信する
アクセスリンクとポート タブに移動します。
EMR コンソール にログインします。左側のナビゲーションペインで、[EMR on ACK] をクリックします。
EMR on ACK ページで、目的のクラスタを見つけ、[クラスタ ID/名前] 列にあるクラスタの名前をクリックします。
表示されるページで、[アクセスリンクとポート] タブをクリックします。
[アクセスリンクとポート] タブで、[アクセス URL] 列の [sparksubmitgateway UI] に対応するリンクをクリックします。
その後、シェル端末に移動できます。
シェル端末で、次のコマンドのいずれかを実行します。
spark-sql コマンド:
spark-sqlspark-sql コマンドを実行した後、インタラクティブクエリを実行できます。

spark-submit コマンド:
spark-submit \ --name spark-pi-submit \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ local:///opt/spark/examples/spark-examples.jar \ 1000
オプション。 [ジョブの詳細] タブで、送信された Spark ジョブに関する情報を表示します。
関連情報
kubectl を使用して Spark ジョブを管理する方法については、「kubectl を使用してジョブを管理する」をご参照ください。
Simple Log Service を使用して Spark ジョブのログを収集する方法については、「Simple Log Service を使用して Spark ジョブのログを収集する」をご参照ください。
EMR で Spark クラスタのメタデータを設定する方法については、「Spark クラスタのメタデータ管理を設定する」をご参照ください。
エラスティックコンテナインスタンスを使用して Spark ジョブを柔軟にスケジュールする方法については、「Elastic Container Instance を使用して Spark ジョブを柔軟にスケジュールする」をご参照ください。