

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EMR on EKS에 대한 Spark 운영자 시작하기
<a name="spark-operator-gs"></a>

이 주제는 Spark 애플리케이션과 Schedule 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. Helm 클라이언트를 Amazon ECR 레지스트리에 인증합니다. 다음 명령에서 {{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.13.0-latest` 릴리스를 사용하므로 차트 Helm `--version`에 대해 `7.13.0`을 지정합니다.

   ```
   helm install spark-operator-demo \
     oci://895885662937.dkr.ecr.{{region-id}}.amazonaws.com/spark-operator \
     --set emrContainers.awsRegion={{region-id}} \
     --version {{7.13.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.13.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 사용
<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 애플리케이션을 정상적으로 제출합니다.