

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR on EKS で Spark 演算子の使用を開始する
<a name="spark-operator-gs"></a>

このトピックは、Spark アプリケーションとスケジュール Spark アプリケーションをデプロイして、Amazon EKS で Spark 演算子の使用を開始するのに役立ちます。

## Spark 演算子をインストールする
<a name="spark-operator-install"></a>

Apache Spark 用の Kubernetes 演算子をインストールするには、以下のステップを実行します。

1. 「[Amazon EMR on EKS での Spark 演算子のセットアップ](spark-operator-setup.md)」のステップをまだ完了していない場合は完了します。

1. Amazon ECR レジストリに対し、Helm クライアントを認証します。以下のコマンドで、*region-id* 値を任意の AWS リージョンに置き換え、[リージョン別の Amazon ECR レジストリアカウント](docker-custom-images-tag.md#docker-custom-images-ECR) ページに表示されているリージョンに対応する *ECR-registry-account* 値を置き換えます。

   ```
   aws ecr get-login-password \
   --region region-id | helm registry login \
   --username AWS \
   --password-stdin ECR-registry-account.dkr.ecr.region-id.amazonaws.com
   ```

1. 以下のコマンドで Spark 演算子をインストールします。

   Helm チャート `--version` パラメータには、`emr-` プレフィックスと日付サフィックスを削除した Amazon EMR リリースラベルを使用してください。例えば、`emr-6.12.0-java17-latest` リリースでは、`6.12.0-java17` を指定します。以下のコマンドの例では `emr-7.12.0-latest` リリースを使用しているため、Helm チャート `--version` 用に `7.12.0` を指定しています。

   ```
   helm install spark-operator-demo \
     oci://895885662937.dkr.ecr.region-id.amazonaws.com/spark-operator \
     --set emrContainers.awsRegion=region-id \
     --version 7.12.0 \
     --namespace spark-operator \
     --create-namespace
   ```

   デフォルトでは、このコマンドは Spark 演算子のサービスアカウント `emr-containers-sa-spark-operator` を作成します。別のサービスアカウントを使用するには、引数 `serviceAccounts.sparkoperator.name` を指定します。例えば、次のようになります。

   ```
   --set serviceAccounts.sparkoperator.name my-service-account-for-spark-operator
   ```

   [Spark 演算子で垂直的自動スケーリングを使用する]()場合は、インストールコマンドに以下の行を追加して、演算子にウェブフックを許可します。

   ```
   --set webhook.enable=true
   ```

1. `helm list` コマンドで Helm チャートをインストールしたことを確認します。

   ```
   helm list --namespace spark-operator -o yaml
   ```

   `helm list` コマンドは、新しくデプロイした Helm チャートのリリース情報を返します。

   ```
   app_version: v1beta2-1.3.8-3.1.1
   chart: spark-operator-7.12.0
   name: spark-operator-demo
   namespace: spark-operator
   revision: "1"
   status: deployed
   updated: 2023-03-14 18:20:02.721638196 +0000 UTC
   ```

1. 必要な追加オプションを指定してインストールを完了します。詳しくは、GitHub の「[https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/charts/spark-operator-chart/README.md](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/charts/spark-operator-chart/README.md)」ドキュメントを参照してください。

## Spark アプリケーションの実行
<a name="spark-operator-run"></a>

Spark 演算子は Amazon EMR 6.10.0 以降でサポートされています。Spark 演算子をインストールすると、Spark アプリケーションを実行するサービスアカウント `emr-containers-sa-spark` がデフォルトで作成されます。Amazon EMR on EKS 6.10.0 以降で Spark 演算子を使用して Spark アプリケーションを実行するには、以下のステップを実行します。

1. Spark 演算子を使用して Spark アプリケーションを実行する前に、[Amazon EMR on EKS での Spark 演算子のセットアップ](spark-operator-setup.md) および [Spark 演算子をインストールする](#spark-operator-install) のステップを完了してください。

1. 以下の例の内容で `SparkApplication` 定義ファイル `spark-pi.yaml` を作成します。

   ```
   apiVersion: "sparkoperator.k8s.io/v1beta2"
   kind: SparkApplication
   metadata:
     name: spark-pi
     namespace: spark-operator
   spec:
     type: Scala
     mode: cluster
     image: "895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.10.0:latest"
     imagePullPolicy: Always
     mainClass: org.apache.spark.examples.SparkPi
     mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar"
     sparkVersion: "3.3.1"
     restartPolicy:
       type: Never
     volumes:
       - name: "test-volume"
         hostPath:
           path: "/tmp"
           type: Directory
     driver:
       cores: 1
       coreLimit: "1200m"
       memory: "512m"
       labels:
         version: 3.3.1
       serviceAccount: emr-containers-sa-spark
       volumeMounts:
         - name: "test-volume"
           mountPath: "/tmp"
     executor:
       cores: 1
       instances: 1
       memory: "512m"
       labels:
         version: 3.3.1
       volumeMounts:
         - name: "test-volume"
           mountPath: "/tmp"
   ```

1. 次に、以下のコマンドを使用して、Spark アプリケーションを送信します。これにより、`spark-pi` という名前の `SparkApplication` オブジェクトも作成されます。

   ```
   kubectl apply -f spark-pi.yaml
   ```

1. 次のコマンドで `SparkApplication` オブジェクトのイベントがないか確認します。

   ```
   kubectl describe sparkapplication spark-pi --namespace spark-operator
   ```

Spark 演算子を使用して Spark にアプリケーションを送信する方法の詳細については、GitHub の `spark-on-k8s-operator` ドキュメントの「[Using a `SparkApplication`](https://www.kubeflow.org/docs/components/spark-operator/user-guide/using-sparkapplication/)」を参照してください。

## Amazon S3 for storage を使用する
<a name="spark-operator-s3-storage"></a>

Amazon S3 をファイルストレージオプションとして使用するには、YAML ファイルに次の設定を追加します。

```
hadoopConf:
# EMRFS filesystem
  fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider
  fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem
  fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate
  fs.s3.buffer.dir: /mnt/s3
  fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000"
  mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2"
  mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true"
sparkConf:
 # Required for EMR Runtime
 spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/*
 spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native
 spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/*
 spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native
```

 Amazon EMR リリース 7.2.0 以降を使用している場合、この設定はデフォルトで含まれています。この場合、Spark アプリケーション YAML ファイルの `local://<file_path>` ではなく、`s3://<bucket_name>/<file_path>` にファイルパスを設定できます。

次に、Spark アプリケーションを通常どおり送信します。