

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

# S3A 파일 시스템
<a name="emr-s3a-file"></a>

이 섹션에서는 S3A 파일 시스템을 사용할 때 Amazon Elastic Map Reduce(EMR)에서 실행되는 Spark에 대한 프로토콜을 다룹니다.

# S3A MagicV2 커미터
<a name="s3a-magicv2-committer"></a>

EMR-6.15.0 릴리스에서 Amazon EMR은 MagicV2 커미터라고 하는 새로운 S3A 커미터 유형을 도입합니다. 이 기능에 대한 자세한 내용은 관련 설명서 섹션을 참조하세요.

MagicV2 커미터는 Amazon S3A 파일 시스템을 통해 Amazon S3에 대한 파일 쓰기를 최적화하도록 특별히 설계된 오픈 소스 [MagicCommitter](https://javadoc.io/static/org.apache.hadoop/hadoop-aws/3.4.0/org/apache/hadoop/fs/s3a/commit/magic/MagicS3GuardCommitter.html)의 향상된 구현을 나타냅니다. 이전 버전과 마찬가지로 Amazon S3의 멀티파트 업로드 기능을 활용하여 일반적으로 작업 및 작업 커밋 단계와 관련된 기존 목록을 제거하고 작업의 이름을 변경합니다.

원래 MagicCommitter에 비해 MagicV2 커미터는 작업 커밋 단계가 아닌 작업 커밋 단계에서 작업의 출력 위치에 파일을 기록하여 우수한 성능을 보여줍니다. 이 접근 방식을 사용하면 분산 파일 쓰기가 가능하고 Amazon S3에서 임시 커밋 메타데이터 스토리지가 필요하지 않으므로 비용 효율성이 향상됩니다. 또한 MagicV2 커미터는 커밋 프로세스 중에 여러 스레드에서 파일 경로를 덮어쓸 수 있으므로 유연성이 향상됩니다.

## MagicV2 커미터 활성화
<a name="s3a-magicv2-committer-enable"></a>

MagicV2 커미터를 활성화하려면 작업 구성에 다음 구성을 전달하거나 코어 사이트 구성을 사용하여 속성을 설정합니다. 자세한 내용은 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)을 참조하세요.

```
mapreduce.outputcommitter.factory.scheme.s3a=org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory
fs.s3a.committer.magic.enabled=true
fs.s3a.committer.name=magicv2
fs.s3a.committer.magic.track.commits.in.memory.enabled=true
```

새 파일을 커밋하거나 쓰기 전에 기존 디렉터리를 덮어써야 하는 워크로드의 경우 앞서 언급한 구성과 함께 다음과 같은 추가 구성이 필요합니다.

```
fs.s3a.committer.magic.overwrite.and.commit=true
fs.s3a.committer.magic.delete.directory.threads=thread size
```

`threads` 구성의 첫 번째로 구성된 값은 `20`입니다. 그러나 더 나은 성능을 위해 덮어써야 할 디렉터리가 많은 경우이 파라미터를 조정합니다. 이는 EMR-7.2.0 이상에서만 사용할 수 있습니다.

## 고려 사항
<a name="considerations"></a>
+ 이러한 차이로 인해 Spark Executor JVM이 충돌하거나 작업이 실행 중이고 Amazon S3에 데이터를 쓰는 경우 불완전한 멀티파트 업로드가 남아 있게 됩니다. 이러한 이유로 MagicV2 커미터를 사용할 때는 실패한 멀티파트 업로드를 관리하는 모범 사례를 따르세요. 자세한 내용은 Amazon EMR 관리 안내서에서 [Amazon S3 버킷 사용에 대한 모범 사례](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#emr-bucket-bestpractices)를 참조하세요.
+ 작업이 실패하더라도 성공한 작업에 의해 커밋된 모든 파일은 대상 경로에 계속 표시됩니다. 이러한 경우 사용자는 동일한 대상 경로에서 작업을 다시 실행하기 전에 커밋된 파일을 수동으로 정리합니다.
+ MagicV2 커미터는 작업이 커밋되거나 중단될 때까지 작업 시도 시 작성된 각 파일에 대해 소량의 메모리를 사용합니다. 대부분의 작업에서 사용되는 메모리 양은 무시할 수 있습니다. 그러나 단일 실행기 프로세스가 많은 수의 작업을 동시에 처리하는 경우 메모리에 많은 부담이 가해질 수 있으며 컨테이너 또는 실행기 메모리 부족(OOM)이 발생할 수 있습니다. 컨테이너 또는 실행기 메모리를 늘리면 이 문제가 해결됩니다.

# 마이그레이션 가이드: EMRFS에서 S3A Filesystem으로
<a name="emr-s3a-migrate"></a>

EMR-7.10.0 릴리스부터 S3A Filesystem은 다음을 포함한 모든 S3 파일 스키마에 대한 EMR 클러스터의 기본 파일 시스템/s3 커넥터입니다.
+ **s3://**
+ **s3n://**
+ **s3a://**

이 변경 사항은 EC2, EKS 및 EMR Serverless를 포함한 모든 EMR 배포에 적용됩니다.

EMRFS를 계속 사용하려면 `core-site.xml` 구성 파일에 다음 속성을 추가하여 구성할 수 있습니다.

```
<property>
  <name>fs.s3.impl</name>
  <value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value>
</property>
```

## 기존 EMRFS 구성을 S3A 구성으로 마이그레이션
<a name="emr-s3a-migration-of-existing-emrfs-configurations"></a>

**참고**  
Amazon EMR은 특정 조건이 충족될 때 EMRFS와 S3A 간에 자동 구성 매핑을 구현합니다. 매핑 프로세스는 해당 EMRFS 구성이 있는 동안 S3A 구성이 정의되지 않은 경우 자동으로 발생합니다. 이 자동 매핑 기능은 버킷 수준 구성으로 확장되므로 EMRFS와 S3A 설정 간의 원활한 통합이 가능합니다. 예를 들어, 값이 'XYZ'인 'fs.s3.bucket.amzn-s3-demo-bucket1.serverSideEncryption.kms.keyId'를 사용하여 EMRFS에서 버킷별 암호화 설정을 구성하면 시스템은 지정된 버킷 amzn-s3-demo-bucket1에 대해 'fs.s3a.encryption.key'를 'XYZ'로 설정하여 이를 동등한 S3A 구성에 자동으로 매핑합니다.

다음과 같은 사전 정의된 EMRFS 구성 세트는 해당 S3A 구성에 상응하는 구성으로 자동 변환됩니다. 클러스터 또는 작업 재정의를 통해 현재 구현된 모든 구성은 추가 수동 구성 또는 수정 없이 S3A 파일 시스템으로 원활하게 전환됩니다.

기본적으로 이 구성 매핑 기능은 자동으로 활성화됩니다. 이 자동 번역을 비활성화하려는 사용자는 core-site.xml 구성 파일에 다음 속성을 추가하여 비활성화할 수 있습니다.

```
<property>
  <name>fs.s3a.emrfs.compatibility.enable</name>
  <value>false</value>
</property>
```

**참고**  
EMRFS(fs.s3.serverSideEncryption.kms.keyId 또는 fs.s3.cse.kms.keyId)에서 S3A(fs.s3a.encryption.key)로의 암호화 키 매핑은 두 파일 시스템 중 하나에서 SSE-KMS 또는 CSE-KMS 암호화가 활성화된 경우에만 발생합니다.


**EMRFS에서 S3A로의 구성 매핑**  

| EMRFS 구성 이름 | S3A 구성 이름 | 
| --- | --- | 
| fs.s3.aimd.adjustWindow | fs.s3a.aimd.adjustWindow | 
| fs.s3.aimd.enabled | fs.s3a.aimd.enabled | 
| fs.s3.aimd.increaseIncrement | fs.s3a.aimd.increaseIncrement | 
| fs.s3.aimd.initialRate | fs.s3a.aimd.initialRate | 
| fs.s3.aimd.maxAttempts | fs.s3a.aimd.maxAttempts | 
| fs.s3.aimd.minRate | fs.s3a.aimd.minRate | 
| fs.s3.aimd.reductionFactor | fs.s3a.aimd.reductionFactor | 
| fs.s3.sts.endpoint | fs.s3a.assumed.role.sts.endpoint | 
| fs.s3.sts.sessionDurationSeconds | fs.s3a.assumed.role.session.duration | 
| fs.s3.authorization.roleMapping | fs.s3a.authorization.roleMapping | 
| fs.s3.authorization.ugi.groupName.enabled | fs.s3a.authorization.ugi.groupName.enabled | 
| fs.s3.credentialsResolverClass | fs.s3a.credentials.resolver | 
| fs.s3n.multipart.uploads.enabled | fs.s3a.multipart.uploads.enabled | 
| fs.s3n.multipart.uploads.split.size | fs.s3a.multipart.size | 
| fs.s3.serverSideEncryption.kms.customEncryptionContext | fs.s3a.encryption.context | 
| fs.s3.enableServerSideEncryption | fs.s3a.encryption.algorithm | 
| fs.s3.serverSideEncryption.kms.keyId / fs.s3.cse.kms.keyId | fs.s3a.encryption.key | 
| fs.s3.cse.kms.region | fs.s3a.encryption.cse.kms.region | 
| fs.s3.authorization.audit.enabled | fs.s3a.authorization.audit.enabled | 
| fs.s3.buckets.create.enabled | fs.s3a.bucket.probe | 
| fs.s3.delete.maxBatchSize | fs.s3a.bulk.delete.page.size | 
| fs.s3.filestatus.metadata.enabled | fs.s3a.metadata.cache.enabled | 
| fs.s3.maxConnections | fs.s3a.connection.maximum | 
| fs.s3.maxRetries | fs.s3a.retry.limit | 
| fs.s3.metadata.cache.expiration.seconds | fs.s3a.metadata.cache.expiration.seconds | 
| fs.s3.buffer.dir | fs.s3a.buffer.dir | 
| fs.s3.canned.acl | fs.s3a.acl.default | 
| fs.s3.positionedRead.optimization.enabled | fs.s3a.positionedRead.optimization.enabled | 
| fs.s3.readFullyIntoBuffers.optimization.enabled | fs.s3a.readFullyIntoBuffers.optimization.enabled | 
| fs.s3.signerType | fs.s3a.signing-algorithm | 
| fs.s3.storageClass | fs.s3a.create.storage.class | 
| fs.s3.threadpool.maxSize | fs.s3a.threads.max | 
| fs.s3.useRequesterPaysHeader | fs.s3a.requester.pays.enabled | 
| fs.s3n.block.size | fs.s3a.block.size | 
| fs.s3n.endpoint | fs.s3a.endpoint | 
| fs.s3n.ssl.enabled | fs.s3a.connection.ssl.enabled | 
| fs.s3.open.acceptsFileStatus | fs.s3a.open.acceptsFileStatus | 
| fs.s3.connection.maxIdleMilliSeconds | fs.s3a.connection.idle.time | 
| fs.s3.s3AccessGrants.enabled | fs.s3a.access.grants.enabled | 
| fs.s3.s3AccessGrants.fallbackToIAM | fs.s3a.access.grants.fallback.to.iam | 

### 고려 사항 및 제한
<a name="emr-s3a-migration-considerations-and-limitations"></a>
+ 모든 EMR 엔진 - Spark, MapReduce, Flink, Tez, Hive 등은 Trino 및 Presto 엔진을 제외하고 S3A를 기본 S3 커넥터로 사용합니다.
+ EMR S3A는 EMR Ranger와의 통합을 지원하지 않습니다. AWS Lake Formation으로 마이그레이션하는 것이 좋습니다.
+ AWS S3A를 사용하는 EMR Spark용 RecordServer를 사용한 Lake Formation 지원은 지원되지 않습니다. Spark 네이티브 FGAC를 사용하는 것이 좋습니다.
+ AWS S3 Select는 지원되지 않습니다.
+ S3A에서는 미완료 멀티파트 업로드(MPU)를 정기적으로 정리하는 옵션을 사용할 수 없습니다. - 매달린 MPUs를 정리하도록 [S3 버킷 수명 주기 정책](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)을 구성하는 것이 좋습니다.
+ S3 CSE-CUSTOM 암호화를 사용하는 동안 EMRFS에서 S3A로 마이그레이션하려면 사용자 지정 키 공급자를 [EMRFSRSAEncryptionMaterialsProvider](https://github.com/awslabs/emr-sample-apps/tree/master/emrfs-plugins/EMRFSRSAEncryptionMaterialsProvider) 인터페이스에서 [키링 인터페이스](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html)로 다시 작성합니다. 자세한 내용은 S3A [CSE-CUSTOM](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-s3a-cse-custom.html) 설정을 참조하세요.
+ EMRFS를 사용하여 생성된 Amazon S3 디렉터리는 '\$1\$1folder\$1' 접미사로 표시된 반면, S3A 파일 시스템을 사용하여 생성된 디렉터리는 S AWS S3 콘솔을 통해 생성된 디렉터리와 일치하는 '/' 접미사로 끝납니다.
+ 사용자 지정 S3 자격 증명 공급자를 사용하려면 이전에 EMRFS 구성 `fs.s3.customAWSCredentialsProvider`에서 사용했던 것과 동일한 자격 증명 공급자 클래스로 S3A 구성 속성 `fs.s3a.aws.credentials.provider`을(를) 설정합니다.

### 지원되지 않는 EMRFS 구성
<a name="emr-s3a-migration-unsupported"></a>

다음 EMRFS 구성은 지원되지 않거나 더 이상 사용되지 않는 것으로 식별되었으므로 S3A 구성에 직접 매핑이 제공되지 않습니다. 이러한 특정 구성은 S3A 파일 시스템으로 마이그레이션하는 동안 자동으로 변환되거나 전달되지 않습니다.


**지원되지 않는 EMRFS 구성 및 이유**  
<a name="unsupported-emrfs-configs"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-s3a-migrate.html)