Amazon EMR on EKS에 대한 Spark 운영자 시작하기 - Amazon EMR

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

Amazon EMR on EKS에 대한 Spark 운영자 시작하기

이 주제는 Spark 애플리케이션과 Schedule Spark 애플리케이션을 배포하여 Amazon EKS에서 Spark 운영자를 사용하기 시작하는 데 도움이 됩니다.

Spark 운영자 설치

다음 단계를 사용하여 Apache Spark용 Kubernetes 운영자를 설치합니다.

  1. 아직 실행하지 않았다면, Amazon EMR on EKS에 대한 Spark 운영자 구성의 단계를 완료합니다.

  2. Helm 클라이언트를 Amazon ECR 레지스트리에 인증합니다. 다음 명령에서 region-id 값을 원하는 AWS 리전및 리전별 Amazon 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
  3. 다음 명령을 사용하여 Spark 운영자를 설치합니다.

    차트 Helm --version 파라미터의 경우 emr- 접두사 및 날짜 접미사가 제거된 Amazon EMR 릴리스 레이블을 사용합니다. 예를 들어, emr-6.12.0-java17-latest 릴리스에서 6.12.0-java17을 지정합니다. 다음 명령의 예제에서는 emr-7.6.0-latest 릴리스를 사용하므로 차트 Helm --version에 대해 7.6.0을 지정합니다.

    helm install spark-operator-demo \ oci://895885662937.dkr.ecr.region-id.amazonaws.com/spark-operator \ --set emrContainers.awsRegion=region-id \ --version 7.6.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
  4. 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.6.0 name: spark-operator-demo namespace: spark-operator revision: "1" status: deployed updated: 2023-03-14 18:20:02.721638196 +0000 UTC
  5. 필요한 추가 옵션을 사용하여 설치를 완료합니다. 자세한 내용은 GitHub의 spark-on-k8s-operator 설명서를 참조하세요.

Spark 애플리케이션 실행

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 운영자 설치의 단계를 완료합니다.

  2. 다음 콘텐츠 예제가 포함된 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"
  3. 이제, 다음 명령을 사용하여 Spark 애플리케이션을 제출합니다. 이렇게 하면 이름이 spark-piSparkApplication 객체도 생성됩니다.

    kubectl apply -f spark-pi.yaml
  4. 다음 명령을 사용하여 SparkApplication 객체에 대한 이벤트를 확인합니다.

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

Spark 운영자를 통해 Spark에 애플리케이션을 제출하는 방법에 대한 자세한 내용은 GitHub의 spark-on-k8s-operator 설명서에서 Using a SparkApplication를 참조하세요.

스토리지로 Amazon S3 사용

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 애플리케이션을 정상적으로 제출합니다.