기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
도커 이미지를 사용자 지정하는 방법
다음 단계를 수행하여 Amazon EMR on EKS에 대한 Docker 이미지를 사용자 지정합니다. 이 단계에서는 기본 이미지를 가져오고, 사용자 지정 및 게시하며, 이미지를 사용하여 워크로드를 제출하는 방법을 보여줍니다.
참고
Docker 이미지를 사용자 지정할 때 고려할 몇 가지 옵션으로, 대화형 엔드포인트에 맞게 사용자 지정하는 방법(이를 통해 필요한 종속 항목을 확보함) 또는 다중 아키텍처 컨테이너 이미지를 사용하는 방법이 있습니다.
사전 조건
-
Amazon EMR on EKS에 대한 Amazon EMR on EKS 설정 단계를 수행합니다.
-
환경에 Docker를 설치합니다. 자세한 내용은 Get Docker
를 참조하세요.
1단계: Amazon Elastic Container Registry(Amazon ECR)에서 기본 이미지 검색
기본 이미지에는 다른 AWS 서비스에 액세스하는 데 사용되는 Amazon EMR 런타임 및 커넥터가 포함되어 있습니다. Amazon EMR 6.9.0 이상에서는 Amazon EMR 퍼블릭 갤러리에서 기본 이미지를 가져올 수 있습니다. 갤러리를 탐색하여 이미지 링크를 찾은 다음, 이미지를 로컬 Workspace로 가져옵니다. 예를 들어 Amazon EMR 7.6.0 릴리스의 경우 다음 docker pull
명령은 가장 마지막 표준 기본 이미지를 가져옵니다. emr-7.6.0:latest
를 emr-7.6.0-spark-rapids:latest
로 바꾸어 Nvidia RAPIDS 액셀러레이터가 있는 이미지를 검색할 수 있습니다. emr-7.6.0:latest
를 emr-7.6.0-java11:latest
로 대체하여 Java 11 런타임에서 이미지를 검색할 수도 있습니다.
docker pull public.ecr.aws/emr-on-eks/spark/
emr-7.6.0:latest
Amazon EMR 6.9.0 이하 릴리스의 기본 이미지를 검색하거나 각 리전의 Amazon ECR 레지스트리 계정에서 검색하려는 경우 다음 단계를 사용합니다.
-
기본 이미지 URI를 선택합니다. 다음 예제에서 볼 수 있듯이 이미지 URI는 이
형식을 따릅니다.ECR-registry-account
.dkr.ecr.Region
.amazonaws.com/spark/container-image-tag
895885662937
.dkr.ecr.us-west-2
.amazonaws.com/spark/emr-6.6.0:latest
리전의 기본 이미지를 선택하려면 기본 이미지 URI 선택에 관한 세부 정보 섹션을 참조하세요.
-
기본 이미지가 저장된 Amazon ECR 리포지토리에 로그인합니다.
895885662937
및us-west-2
를 Amazon ECR 레지스트리 계정 및 선택한 AWS 리전으로 바꿉니다.aws ecr get-login-password --region
us-west-2
| docker login --username AWS --password-stdin895885662937
.dkr.ecr.us-west-2
.amazonaws.com -
기본 이미지를 로컬 Workspace로 가져옵니다.
emr-6.6.0:latest
를 선택한 컨테이너 이미지 태그로 바꿉니다.docker pull
895885662937
.dkr.ecr.us-west-2
.amazonaws.com/spark/emr-6.6.0:latest
2단계: 기본 이미지 사용자 지정
다음 단계를 수행하여 Amazon ECR에서 가져온 기본 이미지를 사용자 지정합니다.
-
로컬 Workspace에 새
Dockerfile
을 생성합니다. -
방금 만든
Dockerfile
을 수정하고 다음 내용을 추가합니다. 이Dockerfile
에서는895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
에서 가져온 컨테이너 이미지를 사용합니다.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
-
Dockerfile
에 명령을 추가하여 기본 이미지를 사용자 지정합니다. 예를 들어, 다음Dockerfile
에서와 같이 Python 라이브러리를 설치하는 명령을 추가합니다.FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
-
Dockerfile
이 생성된 동일한 디렉터리에서 다음 명령을 실행하여 도커 이미지를 빌드합니다. 도커 이미지의 이름(예:emr6.6_custom
)을 입력합니다.docker build -t
emr6.6_custom
.
3단계: (선택적 권장 사항) 사용자 이미지 검증
사용자 지정 이미지를 게시하기 전에 사용자 지정 이미지의 호환성을 테스트하는 것이 좋습니다. Amazon EMR on EKS 사용자 지정 이미지 CLI
참고
Amazon EMR on EKS 사용자 지정 이미지 CLI에서는 이미지에 오류가 없는지 확인할 수 없습니다. 기본 이미지에서 종속성을 제거할 때 주의합니다.
다음 명령을 실행하여 사용자 지정 이미지를 검증합니다.
-
Amazon EMR on EKS 사용자 지정 이미지 CLI를 다운로드하고 설치합니다. 자세한 내용은 Amazon EMR on EKS custom image CLI Installation Guide
를 참조하세요. -
다음 명령을 실행하여 설치를 테스트합니다.
emr-on-eks-custom-image --version
다음은 출력 예제입니다.
Amazon EMR on EKS Custom Image CLI Version: x.xx
-
다음 명령을 실행하여 사용자 지정 이미지를 검증합니다.
emr-on-eks-custom-image validate-image -i
image_name
-rrelease_version
[-timage_type
]-
-i
에서 검증해야 하는 로컬 이미지 URI를 지정합니다. 이는 이미지 URI, 이미지에 정의한 이름 또는 태그일 수 있습니다. -
-r
에서 기본 이미지의 정확한 릴리스 버전(예:emr-6.6.0-latest
)을 지정합니다. -
-t
에서 이미지 유형을 지정합니다. Spark 이미지인 경우spark
를 입력합니다. 기본값은spark
입니다. 현재 Amazon EMR on EKS 사용자 지정 이미지 CLI 버전은 Spark 런타임 이미지만 지원합니다.
명령을 성공적으로 실행하고 사용자 지정 이미지가 모든 필수 구성 및 파일 구조를 충족하면 다음 예제에서 볼 수 있듯이 반환된 출력에 모든 테스트 결과가 표시됩니다.
Amazon EMR on EKS Custom Image Test Version: x.xx ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: xxx [INFO] Created On: 2021-05-17T20:50:07.986662904Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to /home/hadoop : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] SPARK_HOME is set with value: /usr/lib/spark : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] File Structure Test for spark-jars in /usr/lib/spark/jars: PASS [INFO] File Structure Test for hadoop-files in /usr/lib/hadoop: PASS [INFO] File Structure Test for hadoop-jars in /usr/lib/hadoop/lib: PASS [INFO] File Structure Test for bin-files in /usr/bin: PASS ... Start Running Sample Spark Job [INFO] Sample Spark Job Test with local:///usr/lib/spark/examples/jars/spark-examples.jar : PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------
사용자 지정 이미지가 필수 구성 또는 파일 구조를 충족하지 않는 경우 오류 메시지가 나타납니다. 반환된 출력은 잘못된 구성 또는 파일 구조에 대한 정보를 제공합니다.
-
4단계: 사용자 지정 이미지 게시
Amazon ECR 레지스트리에 새 도커 이미지를 게시합니다.
-
다음 명령을 실행하여 도커 이미지를 저장할 Amazon ECR 리포지토리를 생성합니다. 리포지토리의 이름을 입력합니다 (예:
emr6.6_custom_repo
(.us-west-2
를 해당 리전으로 바꿉니다.aws ecr create-repository \ --repository-name
emr6.6_custom_repo
\ --image-scanning-configuration scanOnPush=true \ --regionus-west-2
자세한 내용은 Amazon ECR 사용 설명서에서 리포지토리 생성을 참조하세요.
-
다음 명령을 실행하여 기본 레지스트리에 인증합니다.
aws ecr get-login-password --region
us-west-2
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.us-west-2
.amazonaws.com자세한 내용은 Amazon ECR 사용 설명서에서 기본 레지스트리에 대해 인증을 참조하세요.
-
이미지에 태그를 지정하고 생성한 Amazon ECR 리포지토리에 이미지를 업로드합니다.
이미지에 태그를 지정합니다.
docker tag
emr6.6_custom
aws_account_id
.dkr.ecr.us-west-2
.amazonaws.com/emr6.6_custom_repo
이미지를 푸시합니다.
docker push
aws_account_id
.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
자세한 내용은 Amazon ECR 사용 설명서에서 Amazon ECR에 이미지 게시를 참조하세요.
5단계: 사용자 지정 이미지를 사용하여 Amazon EMR에서 Spark 워크로드 제출
사용자 지정 이미지를 만들고 게시한 후 사용자 지정 이미지를 사용하여 Amazon EMR on EKS 작업을 제출할 수 있습니다.
먼저, 다음 예제 JSON 파일에서 볼 수 있듯이 start-job-run-request.json 파일을 생성하고 사용자 지정 이미지를 참조할 spark.kubernetes.container.image
파라미터를 지정합니다.
참고
아래 JSON 스니펫의 entryPoint
인수와 함께 표시된 것처럼 scheme을 사용하여 사용자 지정 이미지에서 사용 가능한 파일을 참하도록 local://
스키마를 사용할 수 있습니다 local://
스키마를 사용하여 애플리케이션 종속성을 참조할 수도 있습니다. local://
스키마를 사용하여 참조되는 모든 파일 및 종속성은 사용자 지정 이미지의 지정된 경로에 이미 있어야 합니다.
{ "name": "spark-custom-image", "virtualClusterId": "
virtual-cluster-id
", "executionRoleArn": "execution-role-arn
", "releaseLabel": "emr-6.6.0-latest
", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
" } } }
다음 예제에서 볼 수 있듯이 applicationConfiguration
속성을 사용하여 사용자 지정 이미지를 참조할 수도 있습니다.
{ "name": "spark-custom-image", "virtualClusterId": "
virtual-cluster-id
", "executionRoleArn": "execution-role-arn
", "releaseLabel": "emr-6.6.0-latest
", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": [ "10" ], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
" } } ] } }
그런 다음 start-job-run
명령을 실행하여 작업을 제출합니다.
aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json
위의 JSON 예제에서 emr-6.6.0-latest
를 Amazon EMR 릴리스 버전으로 바꿉니다. 선택한 버전에 최신 보안 업데이트가 포함되도록 -latest
릴리스 버전을 사용하는 것이 좋습니다. Amazon EMR 릴리스 버전 및 이미지 태그에 대한 자세한 내용은 기본 이미지 URI 선택에 관한 세부 정보 섹션을 참조하세요.
참고
spark.kubernetes.driver.container.image
및 spark.kubernetes.executor.container.image
를 사용하여 드라이버 및 실행기 포드에 대해 다른 이미지를 지정할 수 있습니다.