EMR Serverless를 사용하여 S3 Express One Zone으로 데이터 가져오기 - Amazon EMR

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

EMR Serverless를 사용하여 S3 Express One Zone으로 데이터 가져오기

Amazon EMR 릴리스 7.2.0 이상에서는 작업 및 워크로드를 실행하는 경우 성능 개선을 위해 Amazon S3 Express One Zone 스토리지 클래스와 함께 EMR Serverless를 사용할 수 있습니다. S3 Express One Zone은 대부분의 지연 시간에 민감한 애플리케이션에서 일관되게 10밀리초 미만의 데이터 액세스를 지원하는 고성능 단일 영역 Amazon S3 스토리지 클래스입니다. 릴리스 시점에 S3 Express One Zone은 Amazon S3에서 지연 시간이 가장 낮고 성능은 가장 뛰어난 클라우드 객체 스토리지를 제공합니다.

사전 조건

  • S3 Express One Zone 권한 - S3 Express One Zone이 S3 객체에서 GET, PUT 또는 LIST과 같은 작업을 처음 수행하면 스토리지 클래스에서 사용자를 대신하여 CreateSession을 직접 호출합니다. S3A 커넥터가 CreateSession API를 간접적으로 호출할 수 있으려면 IAM 정책에서 s3express:CreateSession 권한을 허용해야 합니다. 이 권한이 있는 정책 예시는 S3 Express One Zone 시작하기 섹션을 참조하세요.

  • S3A 커넥터 - S3 Express One Zone 스토리지 클래스를 사용하는 Amazon S3 버킷에서 데이터에 액세스하도록 Spark를 구성하려면 Apache Hadoop 커넥터 S3A를 사용해야 합니다. 커넥터를 사용하려면 모든 S3 URI가 s3a 체계를 사용하는지 확인해야 합니다. 그렇지 않은 경우 s3s3n 체계에 대해 사용하는 파일 시스템 구현을 변경할 수 있습니다.

s3 체계를 변경하려면 다음 클러스터 구성을 지정하세요.

[ { "Classification": "core-site", "Properties": { "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

s3n 체계를 변경하려면 다음 클러스터 구성을 지정하세요.

[ { "Classification": "core-site", "Properties": { "fs.s3n.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3n.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

S3 Express One Zone 시작하기

다음 단계를 수행하여 S3 Express One Zone을 시작합니다.

  1. VPC 엔드포인트를 생성합니다. VPC 엔드포인트에 com.amazonaws.us-west-2.s3express 엔드포인트를 추가합니다.

  2. Amazon EMR Serverless 시작하기를 따라 Amazon EMR 릴리스 레이블 7.2.0 이상을 사용하여 애플리케이션을 생성합니다.

  3. 새로 생성된 VPC 엔드포인트, 프라이빗 서브넷 그룹 및 보안 그룹을 사용하도록 애플리케이션을 구성합니다.

  4. 작업 실행 역할에 필요한 CreateSession 권한을 추가합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "s3express:CreateSession" ] } ] }
  5. 작업을 실행합니다. S3 Express One Zone 버킷에 액세스하려면 S3A 스키마를 사용해야 합니다.

    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <job-role-arn> \ --name <job-run-name> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3a://<DOC-EXAMPLE-BUCKET>/scripts/wordcount.py", "entryPointArguments":["s3a://<DOC-EXAMPLE-BUCKET>/emr-serverless-spark/output"], "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=8g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=2 --conf spark.hadoop.fs.s3a.change.detection.mode=none --conf spark.hadoop.fs.s3a.endpoint.region={<AWS_REGION>} --conf spark.hadoop.fs.s3a.select.enabled=false --conf spark.sql.sources.fastS3PartitionDiscovery.enabled=false }'