기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EMR on EKS에 대한 Spark 연산자를 사용하여 수직 자동 조정 사용
Amazon EMR 7.0부터 Amazon EMR on EKS 수직 자동 조정을 사용하여 리소스 관리를 간소화할 수 있습니다. 이 기능은 Amazon EMR Spark 애플리케이션에 제공하는 워크로드 요구 사항에 맞게 메모리와 CPU 리소스를 자동으로 튜닝합니다. 자세한 내용은 Amazon EMR Spark 작업에 수직 자동 조정 사용 단원을 참조하십시오.
이 섹션에서는 수직 자동 조정을 사용하도록 Spark 운영자를 구성하는 방법을 설명합니다.
사전 조건
모니터링을 구성하기 전에 다음 설정 작업을 완료해야 합니다.
-
Amazon EMR on EKS에 대한 Spark 운영자 구성의 단계를 수행하세요.
-
(선택 사항) 이전에 이전 버전의 Spark 연산자를 설치한 경우 SparkApplication/ScheduledSparkApplication CRD를 삭제합니다.
kubectl delete crd sparkApplication kubectl delete crd scheduledSparkApplication
-
Spark 운영자 설치의 단계를 수행하세요. 3단계에서 운영자에서 웹후크를 허용하도록 설치 명령에 다음 줄을 추가합니다.
--set webhook.enable=true
-
Amazon EMR on EKS에서 수직 자동 조정 설정의 단계를 수행하세요.
-
Amazon S3 위치의 파일에 대한 액세스 권한을 부여합니다.
-
S3 권한이 있는
JobExecutionRole
로 드라이버 및 연산자 서비스 계정에 주석을 지정합니다.kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark eks.amazonaws.com/role-arn=
JobExecutionRole
kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark-operator eks.amazonaws.com/role-arn=JobExecutionRole
-
해당 네임스페이스에서 작업 실행 역할의 신뢰 정책을 업데이트합니다.
aws emr-containers update-role-trust-policy \ --cluster-name cluster \ --namespace ${Namespace}\ --role-name iam_role_name_for_job_execution
-
작업 실행 역할의 IAM 역할 신뢰 정책을 편집하고
serviceaccount
를emr-containers-sa-spark-*-*-xxxx
에서emr-containers-sa-*
로 업데이트합니다.{ "Effect": "Allow", "Principal": { "Federated": "
OIDC-provider
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "OIDC
": "system:serviceaccount:${Namespace}:emr-containers-sa-*" } } } -
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
-
Spark 운영자에서 수직 자동 조정 기능을 사용하여 작업을 실행합니다.
Spark 운영자와 함께 Spark 애플리케이션을 실행하려면 먼저 사전 조건의 단계를 완료해야 합니다.
Spark 연산자와 함께 수직 자동 조정을 사용하려면 Spark 애플리케이션 사양의 드라이버에 다음 구성을 추가하여 수직 자동 조정을 켭니다.
dynamicSizing: mode: Off signature: "my-signature"
이 구성은 수직 자동 크기 조정을 활성화하며, 작업에 대한 서명을 선택할 수 있는 필수 서명 구성입니다.
구성 및 파라미터 값에 대한 자세한 내용은 Amazon EMR on EKS에 대한 수직 자동 조정 구성을 참조하세요. 기본적으로 작업은 수직 자동 조정의 모니터링 전용 꺼짐 모드로 제출됩니다. 이 모니터링 상태를 사용하면 자동 조정을 수행하지 않고도 리소스 권장 사항을 계산하고 볼 수 있습니다. 자세한 내용은 수직 오토 스케일링 모드를 참조하세요.
다음 예제에서는 수직 자동 조정을 사용하는 데 필요한 구성이 포함된 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-7.6.0:latest" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.4.1" dynamicSizing: mode: Off signature: "my-signature" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.4.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.4.1 volumeMounts: - name: "test-volume" mountPath: "/tmp"
이제, 다음 명령을 사용하여 Spark 애플리케이션을 제출합니다. 이렇게 하면 이름이 spark-pi
인 SparkApplication
객체도 생성됩니다.
kubectl apply -f spark-pi.yaml
Spark 운영자를 통해 Spark에 애플리케이션을 제출하는 방법에 대한 자세한 내용은 GitHub의 spark-on-k8s-operator
설명서에서 Using a SparkApplication
수직 자동 조정 기능 확인
제출된 작업에 대해 수직 자동 조정이 올바르게 작동하는지 확인하려면 kubectl을 사용하여 verticalpodautoscaler
사용자 지정 리소스를 가져오고 조정 권장 사항을 확인합니다.
kubectl get verticalpodautoscalers --all-namespaces \ -l=emr-containers.amazonaws.com/dynamic.sizing.signature=
my-signature
이 쿼리에 대한 출력은 다음과 비슷합니다.
NAMESPACE NAME MODE CPU MEM PROVIDED AGE
spark-operator ds-p73j6mkosvc4xeb3gr7x4xol2bfcw5evqimzqojrlysvj3giozuq-vpa Off 580026651 True 15m
출력이 비슷하지 않거나 오류 코드를 포함하는 경우 문제 해결을 위한 단계는 Amazon EMR on EKS 수직 자동 조정 문제 해결 섹션을 참조하세요.
포드 및 애플리케이션을 제거하려면 다음 명령을 실행합니다.
kubectl delete sparkapplication spark-pi