

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

# 마이그레이션 가이드: 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)