

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

# EMR 파일 시스템(EMRFS)
<a name="emr-fs"></a>

**참고**  
EMR 7.10.0 릴리스부터 S3A 파일 시스템은 EMRFS를 기본 EMR S3 커넥터로 대체했습니다.

EMR 파일 시스템(EMRFS)은 모든 Amazon EMR 클러스터가 Amazon EMR에서 Amazon S3로 직접 일반 파일을 읽고 쓸 수 있도록 하는 HDFS 구현입니다. EMRFS는 Hadoop과 함께 사용하기 위해 Amazon S3에 영구 데이터를 저장하는 편리한 기능을 제공하면서 동시에 데이터 암호화 같은 기능도 제공합니다.

데이터 암호화는 EMRFS가 Amazon S3에 기록하는 객체를 암호화하여 EMRFS가 Amazon S3에서 암호화된 객체를 사용할 수 있도록 해줍니다. Amazon EMR 릴리스 버전 4.8.0 이상을 사용하고 있는 경우에는 보안 구성을 사용하여 다른 암호화 설정과 더불어 Amazon S3에서 EMRFS 객체에 대한 암호화를 설정할 수 있습니다. 자세한 내용은 [암호화 옵션](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-data-encryption-options)을 참조하세요. 이전 버전의 Amazon EMR을 사용하는 경우에는 수동으로 암호화 설정을 구성할 수 있습니다. 자세한 내용은 [EMRFS 속성을 사용하여 Amazon S3 암호화 지정](emr-emrfs-encryption.md) 단원을 참조하십시오.

Amazon S3는 모든 AWS 리전에서 모든 GET, PUT 및 LIST 작업에 대해 강력한 읽기 후 쓰기 일관성을 제공합니다. 즉, EMRFS를 사용하여 작성한 내용은 성능에 영향을 주지 않고 Amazon S3에서 읽을 수 있습니다. 자세한 내용은 [Amazon S3 데이터 일관성 모델](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html#ConsistencyModel)을 참조하세요.

Amazon EMR 릴리스 버전 5.10.0 이상을 사용하는 경우에는 Amazon S3에서 EMRFS 데이터의 위치, 그룹 또는 클러스터 사용자에 따라 Amazon S3에 대한 EMRFS 요청에 다른 IAM 역할을 사용할 수 있습니다. 자세한 내용은 [Amazon S3에 대한 EMRFS 요청의 IAM 역할 구성](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-emrfs-iam-roles)을 참조하세요.

**주의**  
Apache Spark 작업을 실행하는 Amazon EMR 클러스터의 추론적 실행을 활성화하기 전에 다음 정보를 검토합니다.  
EMRFS에는 EMRFS를 사용할 때 Amazon S3에 파일을 쓰는 데 최적화된 대체 OutputCommitter 구현인 EMRFS S3 최적화된 커미터가 포함되어 있습니다. EMRFS S3 최적화 커미터를 사용하지 않고 Amazon S3에 데이터를 쓰는 애플리케이션에서 Apache Spark 추론적 실행 기능을 켜면 [SPARK-10063](https://issues.apache.org/jira/browse/SPARK-10063) 설명에 설명된 데이터 정확성 문제가 발생할 수 있습니다. 이는 Amazon EMR 릴리스 5.19 이전의 Amazon EMR 버전을 사용하거나 ORC 및 CSV와 같은 형식으로 Amazon S3에 파일을 쓰는 경우 발생할 수 있습니다. 이러한 형식은 EMRFS S3 최적화 커미터에서 지원되지 않습니다. EMRFS S3 최적화된 커미터를 사용하기 위한 전체 요구 사항 목록은 [EMRFS S3 최적화 커미터 요구 사항](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-committer-reqs.html)을 참조하세요.  
EMRFS 직접 쓰기는 일반적으로 다음과 같이 EMRFS S3 최적화 커미터가 지원되지 않는 경우에 사용됩니다.  
Parquet 외 다른 출력 형식(예: ORC 또는 텍스트 등).
Spark RDD API를 사용하는 Hadoop 파일.
Hive Serde를 사용하는 Parquet. [Hive metastore Parquet table conversion](https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#hive-metastore-parquet-table-conversion)을 참조하세요.
다음 시나리오에서는 EMRFS 직접 쓰기가 사용되지 않습니다.  
EMRFS S3 최적화 커미터를 활성화하는 경우. [EMRFS S3 최적화 커미터의 요구 사항](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-committer-reqs.html)을 참조하세요.
partitionOverwriteMode를 dynamic으로 설정한 상태로 동적 파티션을 작성하는 경우
사용자 지정 파티션 위치에 쓸 때(예: Hive 기본 파티션 위치 규칙을 따르지 않는 위치).
EMRFS 이외의 파일 시스템을 사용하는 경우(예: HDFS에 쓰기 또는 S3A 파일 시스템 사용).
애플리케이션이 Amazon EMR 5.14.0 이상에서 직접 쓰기를 사용하는지 여부를 확인하려면 Spark INFO 로깅을 활성화합니다. Spark 드라이버 로그나 Spark 실행기 컨테이너 로그에 'Direct Write: ENABLED'라는 텍스트가 포함된 로그 줄이 있는 경우 Spark 애플리케이션이 직접 쓰기를 사용하여 기록한 것입니다.  
기본적으로 Amazon EMR 클러스터에서 추론적 실행은 `OFF` 상태입니다. 다음 두 가지 조건에 모두 해당하는 경우 추론적 실행을 켜지 않는 것이 좋습니다.  
Amazon S3에 데이터를 씁니다.
데이터는 Apache Parquet 이외의 형식 또는 EMRFS S3 최적화 커미터를 사용하지 않는 Apache Parquet 형식으로 작성됩니다.
Spark 추론적 실행을 켜고 EMRFS 직접 쓰기를 사용하여 Amazon S3에 데이터를 쓰는 경우 간헐적으로 데이터 손실이 발생할 수 있습니다. HDFS에 데이터를 쓰거나 EMRFS S3 최적화 커미터를 사용하여 Parquet에 데이터를 쓸 때 Amazon EMR은 직접 쓰기를 사용하지 않으므로 이 문제가 발생하지 않습니다.  
Spark에서 Amazon S3로 직접 쓰는 EMRFS를 사용하는 형식으로 데이터를 쓰고 추론적 실행을 사용해야 하는 경우 HDFS에 쓴 다음, S3DistCP를 사용하여 출력 파일을 Amazon S3로 전송하는 것이 좋습니다.

**Topics**
+ [일관된 보기](emr-plan-consistent-view.md)
+ [Amazon S3에서 EMRFS 데이터에 대한 액세스 권한 부여](emr-plan-credentialsprovider.md)
+ [기본 AWS Security Token Service 엔드포인트 관리](emr-emrfs-sts-endpoint.md)
+ [EMRFS 속성을 사용하여 Amazon S3 암호화 지정](emr-emrfs-encryption.md)

# 일관된 보기
<a name="emr-plan-consistent-view"></a>

**주의**  
2023년 6월 1일에 EMRFS 일관된 보기가 향후 Amazon EMR 릴리스에 대한 표준 지원에서 종료됩니다. EMRFS 일관된 보기는 기존 릴리스에서도 계속 작동합니다.

2020년 12월 1일에 Amazon S3의 강력한 읽기 후 쓰기 일관성 기능이 출시됨에 따라 Amazon EMR 클러스터에서 EMRFS 일관된 보기(EMRFS CV)를 더 이상 사용할 필요가 없습니다. EMRFS CV는 Amazon EMR 클러스터가 Amazon S3 객체의 나열 및 쓰기 후 읽기 일관성을 확인할 수 있는 선택적 기능입니다. 클러스터를 생성하고 EMRFS CV를 켜면 Amazon EMR은 Amazon DynamoDB 데이터베이스를 생성하여 S3 객체의 목록 및 쓰기 후 읽기 일관성 추적에 사용하는 객체 메타데이터를 저장합니다. 이제 추가 비용이 발생하지 않도록 EMRFS CV를 끄고 CV에서 사용하는 DynamoDB 데이터베이스를 삭제할 수 있습니다. 다음 절차에서는 CV 기능을 확인하고, 기능을 끈 후에, 기능에서 사용하는 DynamoDB 데이터베이스를 삭제하는 방법을 설명합니다.<a name="enable-emr-fs-console"></a>

**EMRFS CV 기능을 사용하고 있는지 확인하는 방법**

1. **구성** 탭으로 이동합니다. 클러스터의 구성이 다음과 같으면 EMRFS CV를 사용합니다.

   ```
   Classification=emrfs-site,Property=fs.s3.consistent,Value=true
   ```

1. 또는 AWS CLI 를 사용하여 [`describe-cluster` API](https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html)로 클러스터를 설명합니다. 출력에 `fs.s3.consistent: true`가 포함된 경우 클러스터는 EMRFS CV를 사용하는 것입니다.

**Amazon EMR 클러스터에서 EMRFS CV를 끄는 방법**

EMRFS CV 기능을 끄려면 다음 세 가지 옵션 중 하나를 사용합니다. 이러한 옵션을 프로덕션 환경에 적용하기 전에 테스트 환경에서 테스트해야 합니다.

1. 

**기존 클러스터를 중지하고 EMRFS CV 옵션을 사용하지 않고 새 클러스터를 시작하는 방법**

   1. 클러스터를 중지하기 전에 데이터를 백업하고 사용자에게 알려야 합니다.

   1. 클러스터를 중지하려면 [클러스터 종료](https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_TerminateJobFlow.html) 지침을 따릅니다.

   1. Amazon EMR 콘솔을 사용하여 새 클러스터를 생성하는 경우 **고급 옵션**으로 이동합니다. **소프트웨어 설정 편집** 섹션에서 EMRFS CV를 켜는 옵션을 선택 취소합니다. **EMRFS 일관된 보기** 확인란을 사용할 수 있는 경우 선택 취소한 상태로 유지합니다.

   1.  AWS CLI 를 사용하여 [`create-cluster` API](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)로 새 클러스터를 생성하는 경우 EMRFS CV를 켜는 `--emrfs` 옵션을 사용하지 마십시오.

   1. SDK 또는를 사용하여 새 클러스터를 CloudFormation 생성하는 경우 [일관된 보기 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)에 나열된 구성을 사용하지 마십시오.

1. 

**클러스터를 복제하고 EMRFS CV를 제거하는 방법**

   1. Amazon EMR 콘솔에서 EMRFS CV를 사용하는 클러스터를 선택합니다.

   1. **클러스터 세부 정보** 페이지 상단에서 **복제**를 선택합니다.

   1. **이전**을 선택하고 **1단계: 소프트웨어 및 단계**로 이동합니다.

   1. **소프트웨어 설정 편집**에서 EMRFS CV를 제거합니다. **구성 편집**에서 `emrfs-site` 분류에 있는 다음 구성을 삭제합니다. S3 버킷에서 JSON을 로드하는 경우 S3 객체를 수정해야 합니다.

      ```
      [
      	{"classification":
      		"emrfs-site",
      		"properties": {
      			"fs.s3.consistent.retryPeriodSeconds":"10",
      			"fs.s3.consistent":"true",
      			"fs.s3.consistent.retryCount":"5",
      			"fs.s3.consistent.metadata.tableName":"EmrFSMetadata"
      		}
      	}
      ]
      ```

1. 

**인스턴스 그룹을 사용하는 클러스터에서 EMRFS CV를 제거하는 방법**

   1. 다음 명령을 사용하여 단일 EMR 클러스터가 EMRFS CV와 연결된 DynamoDB 테이블을 사용하는지 또는 여러 클러스터가 테이블을 공유하는지 확인합니다. 테이블 이름은 [일관된 보기 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)에 설명된 대로 `fs.s3.consistent.metadata.tableName`에서 지정됩니다. EMRFS CV에서 사용하는 기본 테이블 이름은 `EmrFSMetadata`입니다.

      ```
      aws emr describe-cluster --cluster-id j-XXXXX | grep fs.s3.consistent.metadata.tableName
      ```

   1. 클러스터가 DynamoDB 데이터베이스를 다른 클러스터와 공유하지 않는 경우 다음 명령을 사용하여 클러스터를 재구성하고 EMRFS CV를 비활성화합니다. 자세한 내용은 [실행 중 클러스터에서 인스턴스 그룹 재구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)을 참조하세요.

      ```
      aws emr modify-instance-groups --cli-input-json file://disable-emrfs-1.json
      ```

      이 명령은 수정할 파일을 엽니다. 다음 구성을 사용하여 파일을 수정합니다.

      ```
      {
      	"ClusterId": "j-xxxx",
      	"InstanceGroups": [
      		{
      			"InstanceGroupId": "ig-xxxx",
      			"Configurations": [
      				{
      					"Classification": "emrfs-site",
      					"Properties": {
      						"fs.s3.consistent": "false"
      					},
      					"Configurations": []
      				}
      			]
      		}
      	]
      }
      ```

   1. 클러스터가 DynamoDB 테이블을 다른 클러스터와 공유하는 경우, 공유 S3 위치의 객체를 수정하는 클러스터가 없는 시점에 모든 클러스터에서 EMRFS CV를 끕니다.

**EMRFS CV와 연결된 Amazon DynamoDB 리소스를 삭제하는 방법**

Amazon EMR 클러스터에서 EMRFS CV를 제거한 후에 EMRFS CV와 연결된 DynamoDB 리소스를 삭제합니다. 그렇게 하기 전까지는 EMRFS CV와 관련된 DynamoDB 요금이 계속 발생합니다.

1. DynamoDB 테이블의 CloudWatch 지표를 확인하고 해당 테이블이 클러스터에서 사용되지 않는지 확인합니다.

1. DynamoDB 테이블을 삭제합니다.

   ```
   aws dynamodb delete-table --table-name <your-table-name>
   ```

**EMRFS CV와 연결된 Amazon SQS 리소스를 삭제하는 방법**

1. 불일치 알림을 Amazon SQS로 푸시하도록 클러스터를 구성한 경우 모든 SQS 대기열을 삭제할 수 있습니다.

1. [일관된 보기 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-configure-consistent-view.html)에서 설명한 대로 `fs.s3.consistent.notification.SQS.queueName`에 지정된 Amazon SQS 대기열 이름을 찾습니다. 기본 대기열 이름 형식은 `EMRFS-Inconsistency-<j-cluster ID>`입니다.

   ```
   aws sqs list-queues | grep ‘EMRFS-Inconsistency’
   aws sqs delete-queue –queue-url <your-queue-url>
   ```

**EMRFS CLI 사용을 중지하는 방법**
+ [EMRFS CLI](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrfs-cli-reference.html)는 EMRFS CV가 생성하는 메타데이터를 관리합니다. 향후 Amazon EMR 릴리스에서 EMRFS CV에 대한 표준 지원이 종료됨에 따라 EMRFS CLI에 대한 지원도 종료됩니다.

**Topics**
+ [일관된 보기 활성화](enable-consistent-view.md)
+ [EMRFS의 일관된 보기가 Amazon S3에서 객체를 추적하는 방법 이해](emrfs-files-tracked.md)
+ [재시도 로직](emrfs-retry-logic.md)
+ [EMRFS 일관된 보기 메타데이터](emrfs-metadata.md)
+ [CloudWatch 및 Amazon SQS에 대한 일관성 알림 구성](emrfs-configure-sqs-cw.md)
+ [일관된 보기 구성](emrfs-configure-consistent-view.md)
+ [EMRFS CLI 명령 참조](emrfs-cli-reference.md)

# 일관된 보기 활성화
<a name="enable-consistent-view"></a>

 AWS Management Console, 또는 구성 분류를 사용하여 EMRFS에 대해 Amazon S3 서버 측 암호화 또는 일관된 보기를 활성화할 수 있습니다. AWS CLI `emrfs-site`  <a name="enable-emr-fs-console"></a>

**콘솔을 사용하여 일관성 보기를 구성하려면**

1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 **이전 콘솔로 전환**을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 [이전 콘솔 사용](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)을 참조하세요.

1. **클러스터 생성** 및 **고급 옵션으로 이동**을 선택합니다.

1. **1단계: 소프트웨어 및 설정** 및 **2단계: 하드웨어**에 대한 설정을 선택합니다.

1. **3단계: 일반 클러스터 설정**의 경우 **추가 옵션**에서 **EMRFS 일관성 보기**를 선택합니다.

1. **EMRFS 메타데이터 스토어**의 경우 메타데이터 스토어 이름을 입력합니다. 기본값은 **EmrFSMetadata**입니다. EmrFSMetadata 테이블이 없는 경우 DynamoDB에서 자동으로 생성됩니다.
**참고**  
Amazon EMR은 클러스터가 종료될 때 DynamoDB에서 EMRFS 메타데이터를 자동으로 제거하지 않습니다.

1. **재시도 횟수**에 정수 값을 입력합니다. 불일치가 감지되면 EMRFS에서는 이 횟수만큼 Amazon S3를 직접 호출하려고 시도합니다. 기본값은 **5**입니다.

1. **재시도 기간(초)**의 경우 정수 값을 입력합니다. 이 값은 EMRFS에서 재시도 간에 기다리는 시간입니다. 기본값은 **10**입니다.
**참고**  
후속 시도에는 지수 백오프가 사용됩니다.

**를 사용하여 일관된 보기가 활성화된 클러스터를 시작하려면 AWS CLI**

의 현재 버전을 설치하는 것이 좋습니다 AWS CLI. 최신 릴리스를 다운로드하려면 [https://aws.amazon.com/cli/](https://aws.amazon.com/cli/)를 참조하세요.
+ 
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

  ```
  1. aws emr create-cluster --instance-type m5.xlarge --instance-count 3 --emrfs Consistent=true \
  2. --release-label emr-7.12.0 --ec2-attributes KeyName=myKey
  ```

**를 사용하여 일관된 보기가 활성화되어 있는지 확인하려면 AWS Management Console**
+ 일관성 보기가 콘솔에 활성화되었는지 여부를 확인하려면 **Cluster List(클러스터 목록)**로 이동하고 **클러스터 세부 정보**를 표시할 클러스터 이름을 선택합니다. "EMRFS consistent view" 필드에는 `Enabled` 또는 `Disabled` 값이 있습니다.

**`emrfs-site.xml` 파일을 검사하여 일관성 보기가 활성화되었는지 여부를 확인하려면**
+ 클러스터의 마스터 노드에서 `emrfs-site.xml` 구성 파일을 검사하여 일관성이 활성화되었는지 여부를 확인할 수 있습니다. `fs.s3.consistent`의 부울 값이 `true`로 설정된 경우 Amazon S3와 관련된 파일 시스템 작업에 대해 일관된 보기가 활성화됩니다.

# EMRFS의 일관된 보기가 Amazon S3에서 객체를 추적하는 방법 이해
<a name="emrfs-files-tracked"></a>

EMRFS는 객체의 일관된 보기에 대한 정보를 EMRFS 메타데이터에 추가함으로써 Amazon S3에서 이러한 일관된 보기를 생성합니다. 다음의 경우 EMRFS는 이러한 목록을 메타데이터에 추가합니다.
+  객체가 Amazon EMR 작업 과정 중에 EMRFS에 의해 작성되는 경우
+  EMRFS CLI를 사용하여 객체를 EMRFS 메타데이터와 동기화하거나 EMRFS 메타데이터로 가져오는 경우

EMRFS에서 읽은 객체는 메타데이터에 자동으로 추가되지 않습니다. EMRFS가 객체를 삭제하면 EMRFS CLI를 사용하여 목록을 삭제할 때까지 목록이 메타데이터에 삭제된 상태로 유지됩니다. CLI에 대한 자세한 내용은 [EMRFS CLI 명령 참조](emrfs-cli-reference.md) 섹션을 참조하세요. EMRFS 메타데이터에서 목록 삭제에 대한 자세한 내용은 [EMRFS 일관된 보기 메타데이터](emrfs-metadata.md) 섹션을 참조하세요.

Amazon S3 작업마다 EMRFS는 메타데이터에서 일관된 보기의 객체 세트에 대한 정보를 확인합니다. 이러한 작업 중 하나를 수행하는 동안 Amazon S3가 일관되지 않음이 확인되는 경우 EMRFS는 `emrfs-site` 구성 속성에 정의된 파라미터에 따라 작업을 재시도합니다. 재시도 횟수가 모두 사용된 후에는 `ConsistencyException`을 발생하거나 예외를 기록하고 워크플로를 계속 진행합니다. 재시도 로직에 대한 자세한 내용은 [재시도 로직](emrfs-retry-logic.md) 섹션을 참조하세요. 예를 들면 로그에 `ConsistencyExceptions`가 있을 수 있습니다.
+  listStatus: 메타데이터 항목 `/S3_bucket/dir/object`에 해당하는 Amazon S3 객체 없음
+  getFileStatus: `dir/file` 키가 메타데이터에 있지만 Amazon S3에 없음

EMRFS의 일관된 보기에서 추적되는 객체를 Amazon S3에서 직접 삭제하더라도 Amazon S3의 메타데이터에 존재하는 항목으로 여전히 나열되므로 EMRFS는 해당 객체를 일관되지 않은 항목을 간주합니다. 메타데이터가 EMRFS가 Amazon S3에서 추적하는 객체와 동기화되지 않은 경우 EMRFS CLI에서 **sync** 하위 명령을 사용하여 Amazon S3를 반영하도록 메타데이터를 재설정할 수 있습니다. 메타데이터와 Amazon S3 간의 불일치를 찾기 위해 **diff**를 사용합니다. 마지막으로 EMRFS는 메타데이터에서 참조되는 객체의 일관된 보기만 제공합니다. 동일한 Amazon S3 경로에 추적되지 않는 다른 객체가 있을 수도 있습니다. EMRFS는 Amazon S3 경로에서 객체를 나열할 때 메타데이터에서 추적되는 객체와 Amazon S3 경로에서 추적되는 객체의 상위 세트를 반환합니다.

# 재시도 로직
<a name="emrfs-retry-logic"></a>

EMRFS는 특정 재시도 횟수 동안 메타데이터에서 추적되는 객체에 대한 목록 일관성 확인을 시도합니다. 기본값은 5입니다. 재시도 횟수를 초과하는 경우 `fs.s3.consistent.throwExceptionOnInconsistency`가 `false`로 설정되지 않았으면 원래 작업에서 실패 메시지를 반환합니다. 이 옵션이 false이면 객체가 일관되지 않은 항목으로만 기록됩니다. EMRFS는 기본적으로 지수 백오프 재시도 정책을 사용하지만 고정 정책으로 설정할 수도 있습니다. 또한 사용자는 예외 발생 없이 작업의 나머지 부분을 지속하기 전에 특정 시간 동안 재시도하려고 할 수도 있습니다. `fs.s3.consistent.throwExceptionOnInconsistency`를 `false`로, `fs.s3.consistent.retryPolicyType` 을 `fixed`로, 그리고 `fs.s3.consistent.retryPeriodSeconds`를 원하는 값으로 설정하면 가능합니다. 다음 예제에서는 일관성이 활성화된 상태로 클러스터를 생성합니다. 이 경우, 불일치 항목을 기록하고 10초의 고정 재시도 간격을 설정합니다.

**Example 재시도 기간을 고정 값으로 설정**  

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-type m5.xlarge --instance-count 1 \
--emrfs Consistent=true,Args=[fs.s3.consistent.throwExceptionOnInconsistency=false, fs.s3.consistent.retryPolicyType=fixed,fs.s3.consistent.retryPeriodSeconds=10] --ec2-attributes KeyName=myKey
```

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

자세한 내용은 [일관된 보기](emr-plan-consistent-view.md) 단원을 참조하십시오.

## IMDS의 EMRFS 구성은 리전 직접 호출을 가져옴
<a name="randomized-exponential-backoff-retry"></a>

EMRFS는 IMDS(인스턴스 메타데이터 서비스)를 사용하여 인스턴스 리전과 Amazon S3, DynamoDB 또는 AWS KMS 엔드포인트를 가져옵니다. 하지만 IMDS는 처리할 수 있는 요청 수에 제한이 있으며, 이 제한을 초과하는 요청은 실패합니다. 이 IMDS 제한으로 인해 EMRFS 초기화에 실패하고 쿼리 또는 명령이 실패할 수 있습니다. 다음과 같은 무작위 지수 백오프 재시도 메커니즘과 emrfs-site.xml의 폴백 리전 구성 속성을 사용하여 모든 재시도가 실패하는 시나리오를 해결할 수 있습니다.

```
<property>
    <name>fs.s3.region.retryCount</name>
    <value>3</value>
    <description>
    Maximum retries that would be attempted to get AWS region.
    </description>
</property>
<property>
    <name>fs.s3.region.retryPeriodSeconds</name>
    <value>3</value>
    <description>
    Base sleep time in second for each get-region retry.
    </description>
</property>
<property>
    <name>fs.s3.region.fallback</name>
    <value>us-east-1</value>
    <description>
    Fallback to this region after maximum retries for getting AWS region have been reached.
    </description>
</property>
```

# EMRFS 일관된 보기 메타데이터
<a name="emrfs-metadata"></a>

EMRFS 일관된 보기는 DynamoDB 테이블을 사용하여 Amazon S3에서 EMRFS와 동기화되었거나 EMRFS에서 생성된 객체를 추적하는 방법으로 일관성을 추적합니다. 이 메타데이터는 모든 작업(읽기, 쓰기, 업데이트 및 복사)를 추적하는 데 사용되며, 실제 내용은 저장되지 않습니다. 이 메타데이터는 Amazon S3에서 수신된 객체나 메타데이터가 예상과 일치하는지 여부를 검증하는 데 사용됩니다. 이 확인을 통해 EMRFS는 EMRFS에서 Amazon S3에 기록하는 새 객체와 EMRFS와 동기화된 객체에 대한 쓰기 후 읽기 일관성 및 목록 일관성을 검사할 수 있습니다. 여러 클러스터가 동일한 메타데이터를 공유할 수 있습니다.

**메타데이터에 항목을 추가하는 방법**  
`sync` 또는 `import` 하위 명령을 사용하여 항목을 메타데이터에 추가할 수 있습니다. `sync`는 경로에 Amazon S3 객체의 상태를 반영하지만 `import`는 새 항목을 메타데이터에 추가하는 데에만 사용됩니다. 자세한 내용은 [EMRFS CLI 명령 참조](emrfs-cli-reference.md) 단원을 참조하십시오.

**메타데이터와 Amazon S3 객체 간 차이를 확인하는 방법**  
메타데이터와 Amazon S3 간의 차이를 확인하려면 EMRFS CLI의 `diff` 하위 명령을 사용합니다. 자세한 내용은 [EMRFS CLI 명령 참조](emrfs-cli-reference.md) 단원을 참조하십시오.

**메타데이터 작업이 제한되는지 여부를 알아보는 방법**  
EMRFS는 메타데이터에 대한 읽기 및 쓰기 작업의 기본 처리량 제한을 각각 500 유닛 및 100 유닛으로 설정합니다. 객체 또는 버킷 수가 많으면 작업이 이 용량을 초과하여 DynamoDB에서 작업을 제한합니다. 예를 들어, 애플리케이션에서 이러한 용량 제한을 초과하는 작업을 수행하려는 경우 EMRFS에서 `ProvisionedThroughputExceededException`이 발생할 수 있습니다. 제한 시 EMRFS CLI 도구는 작업이 완료될 때까지 또는 Amazon EMR에서 Amazon S3로 객체 쓰기 최대 재시도 값에 도달할 때 [지수 백오프](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)를 사용하여 DynamoDB 테이블에 쓰는 작업을 재시도합니다.

처리 용량 한도를 구성할 수 있습니다. 그러나 DynamoDB의 읽기 및 쓰기 작업에 대한 파티션 제한은 초당 3,000의 읽기 용량 유닛(RCU) 및 1,000의 쓰기 용량 유닛(WCU)이 적용됩니다. 제한으로 인한 `sync` 실패를 방지하려면 읽기 작업의 처리량을 3,000 RCU, 쓰기 작업의 처리량을 1,000 WCU 미만으로 제한하는 것이 좋습니다. 사용자 지정 처리량 용량 제한을 설정하는 방법에 대한 지침은 [일관된 보기 구성](emrfs-configure-consistent-view.md) 섹션을 참조하세요.

제한된 읽기 및 쓰기 요청 수를 볼 수 있는 DynamoDB 콘솔에서 EMRFS 메타데이터에 대한 Amazon CloudWatch 지표도 볼 수 있습니다. 제한된 요청에 대해 0이 아닌 값을 지정한 읽기 또는 쓰기 작업에 대해 할당된 처리 용량을 높이는 것이 애플리케이션에 도움이 될 수 있습니다. 또한 애플리케이션이 장시간 읽기 또는 쓰기 작업에 대해 할당된 최대 처리 용량에 근접하는 경우에도 성능 이점을 얻을 수 있습니다.

**주목할 만한 EMRFS 작업에 대한 처리량 특성**  
읽기 및 쓰기 작업의 처리 용량 기본값은 각각 400단위 및 100단위입니다. 다음과 같은 성능 특성은 특정 작업에 필요한 처리량을 결정하는 데 도움이 됩니다. 이러한 테스트는 단일 노드 `m3.large` 클러스터를 사용하여 수행되었습니다. 모든 작업이 단일 스레드입니다. 성능은 특정 애플리케이션 특성에 따라 크게 달라지므로 파일 시스템 작업을 최적화하기 위해 실험이 필요할 수도 있습니다.


| 연산  | 초당 평균 읽기  | 초당 평균 쓰기  | 
| --- | --- | --- | 
| create(객체) | 26.79 |  6.70 | 
| delete(객체) | 10.79 |  10.79 | 
| delete(1000개 객체를 포함하는 디렉터리) | 21.79 | 338.40  | 
|  getFileStatus(객체) | 34.70 | 0  | 
| getFileStatus(디렉터리) | 19.96 | 0 | 
| listStatus(객체 1개를 포함하는 디렉터리) | 43.31 | 0 | 
| listStatus(10개 객체를 포함하는 디렉터리) | 44.34 | 0 | 
| listStatus(100개 객체를 포함하는 디렉터리) | 84.44 | 0 | 
| listStatus(1,000개 객체를 포함하는 디렉터리) | 308.81 | 0 | 
| listStatus(10,000개 객체를 포함하는 디렉터리) | 416.05 | 0 | 
| listStatus(100,000개 객체를 포함하는 디렉터리) | 823.56 | 0 | 
| listStatus(1M 객체를 포함하는 디렉터리) | 882.36 | 0 | 
| mkdir(120초 동안 지속)  | 24.18 | 4.03 | 
| mkdir | 12.59 | 0 | 
| rename(객체) | 19.53 | 4.88 | 
| rename(1000개 객체를 포함하는 디렉터리) | 23.22 | 339.34 | 

**메타데이터 스토어에서 오래된 데이터를 삭제하는 단계를 제출하려면**  
사용자가 DynamoDB 기반 메타데이터에서 특정 항목을 제거해야 할 때가 있습니다. 이 작업을 수행하면 테이블 관련 스토리지 비용을 절감할 수 있습니다. 사용자는 EMRFS CLI `delete` 하위 명령을 사용하여 특정 항목을 수동으로 또는 프로그래밍 방식으로 삭제할 수 있습니다. 하지만 메타데이터의 항목을 삭제할 경우 EMRFS에서 더 이상 일관성 검사가 수행되지 않습니다.

작업 완료 후 프로그래밍 방식으로 삭제하는 작업은 EMRFS CLI에서 명령을 실행하는 최종 단계를 클러스터에 제출함으로써 수행할 수 있습니다. 예를 들어, 다음 명령을 입력하여 클러스터에 2일 이상 지난 모든 항목을 삭제하도록 하는 단계를 클러스터에 제출합니다.

```
aws emr add-steps --cluster-id j-2AL4XXXXXX5T9 --steps Name="emrfsCLI",Jar="command-runner.jar",Args=["emrfs","delete","--time","2","--time-unit","days"]
{
    "StepIds": [
        "s-B12345678902"
    ]
}
```

반환된 StepId 값을 사용하여 작업 결과에 대한 로그를 확인합니다.

# CloudWatch 및 Amazon SQS에 대한 일관성 알림 구성
<a name="emrfs-configure-sqs-cw"></a>

EMRFS에서 Amazon S3 최종 일관성 문제와 관련하여 CloudWatch 지표 및 Amazon SQS 메시지를 활성화할 수 있습니다.

**CloudWatch**  
CloudWatch 지표가 활성화되면 Amazon S3의 최종 일관성으로 인해 `FileSystem` API 직접 호출이 실패할 때마다 **불일치**라는 이름의 지표가 푸시됩니다.

**Amazon S3 최종 일관성 문제에 대해 CloudWatch 지표를 보는 방법**

CloudWatch 콘솔에서 **불일치** 지표를 보려면 EMRFS 지표를 선택한 다음 **JobFlowID** 및 **지표 이름** 페어를 선택합니다. 예: `j-162XXXXXXM2CU ListStatus`, `j-162XXXXXXM2CU GetFileStatus` 등.

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. [**Dashboard**]의 [**Metrics**] 섹션에서 [**EMRFS**]를 선택합니다.

1. [**Job Flow Metrics**] 창에서 하나 이상의 [**JobFlowId**/**Metric Name**] 페어를 선택합니다. 측정치를 나타내는 그림이 아래 창에 나타납니다.

**Amazon SQS**  
Amazon SQS 알림이 활성화되면 EMRFS가 초기화될 때 이름이 `EMRFS-Inconsistency-<jobFlowId>`인 Amazon SQS 대기열이 생성됩니다. Amazon S3의 최종 일관성으로 인해 `FileSystem` API 직접 호출에 실패하면 Amazon SQS 메시지가 대기열로 푸시됩니다. 이 메시지에는 JobFlowId, API, 일관되지 않은 경로 목록, 스택 추적 등의 정보가 포함됩니다. Amazon SQS 콘솔이나 EMRFS `read-sqs` 명령을 사용하여 메시지를 읽을 수 있습니다.

**Amazon S3 최종 일관성 문제에 대한 Amazon SQS 메시지를 관리하는 방법**

Amazon S3 최종 일관성 문제에 대한 Amazon SQS 메시지는 EMRFS CLI를 사용하여 읽을 수 있습니다. EMRFS Amazon SQS 대기열에서 메시지를 읽으려면 `read-sqs` 명령을 입력하고 결과 출력 파일에 대해 프라이머리 노드의 로컬 파일 시스템에 출력 위치를 지정합니다.

또한 `delete-sqs` 명령을 사용하여 EMRFS Amazon SQS 대기열을 삭제할 수도 있습니다.

1. Amazon SQS 대기열의 메시지를 읽으려면 다음 명령을 입력합니다. *queuename*을 구성된 Amazon SQS 대기열의 이름으로 바꾸고 */path/filename*을 출력 파일의 경로로 바꿉니다.

   ```
   emrfs read-sqs --queue-name queuename --output-file /path/filename
   ```

   예를 들어, 기본 대기열에서 Amazon SQS 메시지를 읽고 출력하려면 다음을 입력합니다.

   ```
   emrfs read-sqs --queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU --output-file /path/filename
   ```
**참고**  
또한 각각 `-q` 및 `-o` 대신에 `--queue-name` 및 `--output-file` 바로 가기를 사용할 수도 있습니다.

1. Amazon SQS 대기열을 삭제하려면 다음 명령을 입력합니다.

   ```
   emrfs delete-sqs --queue-name queuename
   ```

   예를 들어, 기본 대기열을 삭제하려면 다음을 입력합니다.

   ```
   emrfs delete-sqs --queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU
   ```
**참고**  
또한 `-q` 대신에 `--queue-name` 바로 가기를 사용할 수도 있습니다.

# 일관된 보기 구성
<a name="emrfs-configure-consistent-view"></a>

`emrfs-site` 속성에서 구성 속성을 통해 추가 설정을 제공함으로써 일관성 보기에 대해 추가 설정을 구성할 수 있습니다. 예를 들어, emrfs-site 구성 분류(Amazon EMR 릴리스 버전 4.x 이상만)나 부트스트랩 작업을 사용하여 프라이머리 노드에서 emrfs-site.xml 파일을 구성함으로써 CLI `--emrfs` 옵션에 다음과 같은 인수를 제공해 다른 기본 DynamoDB 처리량을 선택할 수 있습니다.

**Example 클러스터 시작 시 기본 메타데이터 읽기 및 쓰기 값 변경**  

```
aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge \
--emrfs Consistent=true,Args=[fs.s3.consistent.metadata.read.capacity=600,\
fs.s3.consistent.metadata.write.capacity=300] --ec2-attributes KeyName=myKey
```

또는 다음과 같은 구성 파일을 사용하고 이 파일을 로컬로 저장하거나 Amazon S3에 저장합니다.

```
[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.consistent.metadata.read.capacity": "600",
        "fs.s3.consistent.metadata.write.capacity": "300"
      }
    }
 ]
```

다음 구문으로 생성된 구성을 사용합니다.

```
aws emr create-cluster --release-label emr-7.12.0 --applications Name=Hive \
--instance-type m5.xlarge --instance-count 2 --configurations file://./myConfig.json
```

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

구성 또는 AWS CLI `--emrfs` 인수를 사용하여 다음 옵션을 설정할 수 있습니다. 이러한 인수에 대한 자세한 내용은 [AWS CLI 명령 참조](https://docs.aws.amazon.com/cli/latest/reference/)를 참조하세요.


**일관된 보기에 대한 `emrfs-site.xml` 속성**  

| 속성  | 기본값  | 설명  | 
| --- | --- | --- | 
| fs.s3.consistent | false |  **true**로 설정할 경우 이 속성은 DynamoDB를 사용하여 일관성을 제공하도록 EMRFS를 구성합니다.  | 
| fs.s3.consistent.retryPolicyType | exponential | 이 속성은 일관성 문제로 재시도 시 사용할 정책을 식별합니다. exponential, fixed 또는 none을 옵션으로 사용할 수 있습니다. | 
| fs.s3.consistent.retryPeriodSeconds | 1 | 이 속성은 일관성 재시도 사이 대기 시간을 설정합니다. | 
| fs.s3.consistent.retryCount | 10 | 이 속성은 비일관성이 검색될 때 최대 재시도 횟수를 설정합니다. | 
| fs.s3.consistent.throwExceptionOnInconsistency | true | 이 속성은 일관성 예외를 발생할지 아니면 기록할지 여부를 결정합니다. true로 설정할 경우 ConsistencyException이 발생됩니다. | 
| fs.s3.consistent.metadata.autoCreate | true | true로 설정할 경우 이 속성은 메타데이터 테이블의 자동 생성을 활성화합니다. | 
| fs.s3.consistent.metadata.etag.verification.enabled | true | Amazon EMR 5.29.0의 경우 이 속성은 기본적으로 활성화되어 있습니다. 활성화하면 EMRFS는 S3 ETag를 사용하여 읽고 있는 객체가 사용 가능한 최신 버전인지 확인합니다. 이 기능은 동일한 이름을 유지하면서 S3의 파일을 덮어쓰는 업데이트 후 읽기 사용 사례에 유용합니다. 이 ETag 확인 기능은 현재 S3 Select에서 작동하지 않습니다. | 
| fs.s3.consistent.metadata.tableName | EmrFSMetadata | 이 속성은 DynamoDB에서 메타데이터 테이블의 이름을 지정합니다. | 
| fs.s3.consistent.metadata.read.capacity | 500 | 이 속성은 메타데이터 테이블이 생성될 때 프로비저닝할 DynamoDB 읽기 용량을 지정합니다. | 
| fs.s3.consistent.metadata.write.capacity | 100 | 이 속성은 메타데이터 테이블이 생성될 때 프로비저닝할 DynamoDB 쓰기 용량을 지정합니다. | 
| fs.s3.consistent.fastList | true | true로 설정할 경우 이 속성은 여러 스레드를 사용하여 디렉터리를 나열합니다(필요한 경우). 이 속성을 사용하려면 일관성이 활성화되어야 합니다. | 
| fs.s3.consistent.fastList.prefetchMetadata | false | true로 설정할 경우 이 속성은 20,000개 이상의 항목을 포함하는 디렉터리에 대해 메타데이터 미리 가져오기 기능을 활성화합니다. | 
| fs.s3.consistent.notification.CloudWatch | false | true로 설정할 경우 Amazon S3 최종 일관성 문제로 인해 실패하는 FileSystem API 직접 호출에 대해 CloudWatch 지표가 활성화됩니다. | 
| fs.s3.consistent.notification.SQS | false | true로 설정할 경우 최종 일관성 알림이 Amazon SQS 대기열로 푸시됩니다. | 
| fs.s3.consistent.notification.SQS.queueName | EMRFS-Inconsistency-<jobFlowId> | 이 속성을 변경하면 Amazon S3 최종 일관성 문제에 관한 메시지에 대해 사용자 고유의 SQS 대기열 이름을 지정할 수 있습니다. | 
| fs.s3.consistent.notification.SQS.customMsg | none | 이 속성을 통해 Amazon S3 최종 일관성 문제에 관한 SQS 메시지에 포함된 사용자 지정 정보를 지정할 수 있습니다. 이 속성에 대한 값을 지정하지 않은 경우 메시지의 해당 필드가 비어 있습니다. | 
| fs.s3.consistent.dynamodb.endpoint | none | 이 속성을 사용하면 일관성 보기 메타데이터에 대한 사용자 지정 DynamoDB 엔드포인트를 지정할 수 있습니다. | 
| fs.s3.useRequesterPaysHeader | false | true로 설정하면 이 속성을 사용하여 요청 지급인 옵션이 활성화된 상태에서 Amazon S3의 버킷 요청이 허용됩니다. | 

# EMRFS CLI 명령 참조
<a name="emrfs-cli-reference"></a>

EMRFS CLI는 Amazon EMR 릴리스 버전 3.2.1 이상을 사용하여 생성된 모든 클러스터 프라이머리 노드에 기본적으로 설치됩니다. EMRFS CLI를 사용하여 일관성 보기에 대한 메타데이터를 관리할 수 있습니다.

**참고**  
**emrfs** 명령은 VT100 터미널 에뮬레이션에만 지원됩니다. 하지만 다른 터미널 에뮬레이터 모드에서 작동할 수도 있습니다.

## emrfs top-level 명령
<a name="emrfs-top-level"></a>

**emrfs** 최상위 명령은 다음 구조를 지원합니다.

```
emrfs [describe-metadata | set-metadata-capacity | delete-metadata | create-metadata | \
list-metadata-stores | diff | delete | sync | import ] [options] [arguments]
```

다음 표의 설명에 따라 [arguments] 유무에 상관없이 [options]를 지정합니다. 하위 명령(`describe-metadata`, `set-metadata-capacity` 등)에 대한 [options]는 아래 하위 명령을 참조하세요.


**emrfs의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-a AWS_ACCESS_KEY_ID \| --access-key AWS_ACCESS_KEY_ID`  |  Amazon S3에 객체를 쓰고 DynamoDB에서 메타데이터 스토어를 생성하거나 액세스하는 데 사용하는 AWS 액세스 키입니다. 기본적으로 *AWS\$1ACCESS\$1KEY\$1ID*는 클러스터를 생성하는 데 사용되는 액세스 키로 설정됩니다.  |  아니요  | 
|  `-s AWS_SECRET_ACCESS_KEY \| --secret-key AWS_SECRET_ACCESS_KEY`  |  Amazon S3에 객체를 쓰고 DynamoDB에서 메타데이터 스토어를 생성하거나 액세스하는 데 사용하는 액세스 키와 연결된 AWS 보안 키입니다. 기본적으로 *AWS\$1SECRET\$1ACCESS\$1KEY*는 클러스터를 생성하는 데 사용되는 액세스 키와 연결된 비밀 키로 설정됩니다.  |  아니요  | 
|  `-v \| --verbose`  |  출력을 상세 표시 모드로 설정합니다.  |  아니요  | 
|  `-h \| --help`  |  `emrfs` 명령에 대한 도움말 메시지와 사용법 설명을 표시합니다.  |  아니요  | 

## emrfs describe-metadata 하위 명령
<a name="emrfs-describe-metadata"></a>


**emrfs describe-metadata의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 

**Example emrfs describe-metadata 예제**  <a name="emrfs-describe-metadata"></a>
다음 예제에서는 기본 메타데이터 테이블을 설명합니다.  

```
$ emrfs describe-metadata
EmrFSMetadata
  read-capacity: 400
  write-capacity: 100
  status: ACTIVE
  approximate-item-count (6 hour delay): 12
```

## emrfs set-metadata-capacity 하위 명령
<a name="emrfs-set-metadata-capacity"></a>


**emrfs set-metadata-capacity의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  `-r READ_CAPACITY \| --read-capacity READ_CAPACITY`  |  메타데이터 테이블에 대해 요청한 읽기 처리 용량입니다. *READ\$1CAPACITY* 인수를 지정하지 않을 경우 기본값은 `400`입니다.  |  아니요  | 
|  `-w WRITE_CAPACITY \| --write-capacity WRITE_CAPACITY`  |  메타데이터 테이블에 대해 요청한 쓰기 처리 용량입니다. *WRITE\$1CAPACITY* 인수를 지정하지 않을 경우 기본값은 `100`입니다.  |  아니요  | 

**Example emrfs set-metadata-capacity 예제**  
다음 예제에서는 메타데이터 테이블 `600`에 대해 읽기 처리 용량을 `150`으로 설정하고 쓰기 용량을 `EmrMetadataAlt`으로 설정합니다.  

```
$ emrfs set-metadata-capacity --metadata-name EmrMetadataAlt  --read-capacity 600 --write-capacity 150
  read-capacity: 400
  write-capacity: 100
  status: UPDATING
  approximate-item-count (6 hour delay): 0
```

## emrfs delete-metadata 하위 명령
<a name="emrfs-delete-metadata"></a>


**emrfs delete-metadata의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 

**Example emrfs delete-metadata 예제**  
다음 예제에서는 기본 메타데이터 테이블을 삭제합니다.  

```
$ emrfs delete-metadata
```

## emrfs create-metadata 하위 명령
<a name="emrfs-create-metadata"></a>


**emrfs create-metadata의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  `-r READ_CAPACITY \| --read-capacity READ_CAPACITY`  |  메타데이터 테이블에 대해 요청한 읽기 처리 용량입니다. *READ\$1CAPACITY* 인수를 지정하지 않을 경우 기본값은 `400`입니다.  |  아니요  | 
|  `-w WRITE_CAPACITY \| --write-capacity WRITE_CAPACITY`  |  메타데이터 테이블에 대해 요청한 쓰기 처리 용량입니다. *WRITE\$1CAPACITY* 인수를 지정하지 않을 경우 기본값은 `100`입니다.  |  아니요  | 

**Example emrfs create-metadata 예제**  
다음 예제에서는 메타데이터 테이블 `EmrFSMetadataAlt`를 생성합니다.  

```
$ emrfs create-metadata -m EmrFSMetadataAlt
Creating metadata: EmrFSMetadataAlt
EmrFSMetadataAlt
  read-capacity: 400
  write-capacity: 100
  status: ACTIVE
  approximate-item-count (6 hour delay): 0
```

## emrfs list-metadata-stores 하위 명령
<a name="emrfs-list-metadata-stores"></a>

**emrfs list-metadata-stores** 하위 명령에는 [options]가 없습니다.

**Example List-metadata-stores 예제**  
다음 예제는 메타데이터 테이블을 나열합니다.  

```
$ emrfs list-metadata-stores
  EmrFSMetadata
```

## emrfs diff 하위 명령
<a name="emrfs-diff"></a>


**emrfs diff의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  *s3://s3Path*  |  메타데이터 테이블과 비교하기 위한 Amazon S3 버킷 경로. 버킷을 재귀적으로 동기화합니다.  |  예  | 

**Example emrfs diff 예제**  
다음 예제에서는 기본 메타데이터 테이블을 Amazon S3 버킷과 비교합니다.  

```
$ emrfs diff s3://elasticmapreduce/samples/cloudfront
BOTH | MANIFEST ONLY | S3 ONLY
DIR elasticmapreduce/samples/cloudfront
DIR elasticmapreduce/samples/cloudfront/code/
DIR elasticmapreduce/samples/cloudfront/input/
DIR elasticmapreduce/samples/cloudfront/logprocessor.jar
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-14.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-15.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-16.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-17.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-18.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-19.WxYz1234
DIR elasticmapreduce/samples/cloudfront/input/XABCD12345678.2009-05-05-20.WxYz1234
DIR elasticmapreduce/samples/cloudfront/code/cloudfront-loganalyzer.tgz
```

## emrfs delete 하위 명령
<a name="emrfs-delete"></a>


**emrfs delete의 [options]**  

|  옵션  |  설명  |  필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  *s3://s3Path*  |  일관된 보기에 대해 추적 중인 Amazon S3 버킷의 경로입니다. 버킷을 재귀적으로 동기화합니다.  |  예  | 
| -t TIME \$1 --time TIME |  만료 시간(시간 단위 인수를 사용하여 해석됨). 지정된 버킷에 대해 *TIME* 인수보다 오래된 모든 메타데이터 항목이 삭제됩니다.  |  | 
|  `-u UNIT \| --time-unit UNIT`  |  시간 인수를 해석하는 데 사용되는 단위(nanoseconds, microseconds, milliseconds, seconds, minutes, hours 또는 days)입니다. 인수를 지정하지 않을 경우 기본값은 `days`입니다.  |  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 읽기 처리량입니다. *READ\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `400`입니다.  |  아니요   | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 쓰기 처리량입니다. *WRITE\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `100`입니다.  |  아니요  | 

**Example emrfs delete 예제**  
다음 예제에서는 일관된 보기에 대해 추적 중인 메타데이터에서 Amazon S3 버킷의 모든 객체를 제거합니다.  

```
$ emrfs delete s3://elasticmapreduce/samples/cloudfront
entries deleted: 11
```

## emrfs import 하위 명령
<a name="emrfs-import"></a>


**emrfs import의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  *s3://s3Path*  |  일관된 보기에 대해 추적 중인 Amazon S3 버킷의 경로입니다. 버킷을 재귀적으로 동기화합니다.  |  예  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 읽기 처리량입니다. *READ\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `400`입니다.  |  아니요  | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 쓰기 처리량입니다. *WRITE\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `100`입니다.  |  아니요  | 

**Example emrfs import 예제**  
다음 예제에서는 일관된 보기에 대해 추적 중인 메타데이터와 함께 Amazon S3 버킷의 모든 객체를 가져옵니다. 알 수 없는 모든 키가 무시됩니다.  

```
$ emrfs import s3://elasticmapreduce/samples/cloudfront
```

## emrfs sync 하위 명령
<a name="emrfs-sync"></a>


**emrfs sync의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-m METADATA_NAME \| --metadata-name METADATA_NAME`  |  *METADATA\$1NAME*은 DynamoDB 메타데이터 테이블 이름입니다. *METADATA\$1NAME* 인수를 지정하지 않을 경우 기본값은 `EmrFSMetadata`입니다.  |  아니요  | 
|  *s3://s3Path*  |  일관된 보기에 대해 추적 중인 Amazon S3 버킷의 경로입니다. 버킷을 재귀적으로 동기화합니다.  |  예  | 
|  `--read-consumption READ_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 읽기 처리량입니다. *READ\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `400`입니다.  |  아니요  | 
|  `--write-consumption WRITE_CONSUMPTION`  |  **delete** 작업에 사용할 요청된 사용 가능한 쓰기 처리량입니다. *WRITE\$1CONSUMPTION* 인수를 지정하지 않는 경우 기본값은 `100`입니다.  |  아니요  | 

**Example emrfs sync 명령 예제**  
다음 예제에서는 일관된 보기에 대해 추적 중인 메타데이터와 함께 Amazon S3 버킷의 모든 객체를 가져옵니다. 알 수 없는 모든 키가 삭제됩니다.  

```
$ emrfs sync s3://elasticmapreduce/samples/cloudfront
Synching samples/cloudfront                                       0 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/code/                                 1 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/                                      2 added | 0 updated | 0 removed | 0 unchanged
Synching samples/cloudfront/input/                                9 added | 0 updated | 0 removed | 0 unchanged
Done synching s3://elasticmapreduce/samples/cloudfront            9 added | 0 updated | 1 removed | 0 unchanged
creating 3 folder key(s)
folders written: 3
```

## emrfs read-sqs 하위 명령
<a name="emrfs-read-sqs"></a>


**emrfs read-sqs의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-q QUEUE_NAME \| --queue-name QUEUE_NAME`  |  *QUEUE\$1NAME*은 `emrfs-site.xml`에 구성된 Amazon SQS 대기열 이름입니다. 기본값은 **EMRFS-Inconsistency-<jobFlowId>**입니다.  |  예  | 
|  `-o OUTPUT_FILE \| --output-file OUTPUT_FILE`  |  *OUTPUT\$1FILE*은 마스터 노드 로컬 파일 시스템의 출력 파일 경로입니다. 대기열에서 읽은 메시지가 이 파일에 기록됩니다.  |  예  | 

## emrfs delete-sqs 하위 명령
<a name="emrfs-delete-sqs"></a>


**emrfs delete-sqs의 [options]**  

| 옵션  | 설명  | 필수  | 
| --- | --- | --- | 
|  `-q QUEUE_NAME \| --queue-name QUEUE_NAME`  |  *QUEUE\$1NAME*은 `emrfs-site.xml`에 구성된 Amazon SQS 대기열 이름입니다. 기본값은 **EMRFS-Inconsistency-<jobFlowId>**입니다.  |  예  | 

## EMRFS CLI 명령을 단계로 제출
<a name="emrfs-submit-steps-as-cli"></a>

다음 예제에서는 AWS CLI 또는 API와를 활용하여 `emrfs` 명령을 단계로 `command-runner.jar` 실행하여 마스터 노드에서 `emrfs` 유틸리티를 사용하는 방법을 보여줍니다. 이 예제에서는 AWS SDK for Python (Boto3) 를 사용하여 Amazon S3 버킷의 객체를 기본 EMRFS 메타데이터 테이블에 추가하는 단계를 클러스터에 추가합니다.

```
import boto3
from botocore.exceptions import ClientError


def add_emrfs_step(command, bucket_url, cluster_id, emr_client):
    """
    Add an EMRFS command as a job flow step to an existing cluster.

    :param command: The EMRFS command to run.
    :param bucket_url: The URL of a bucket that contains tracking metadata.
    :param cluster_id: The ID of the cluster to update.
    :param emr_client: The Boto3 Amazon EMR client object.
    :return: The ID of the added job flow step. Status can be tracked by calling
             the emr_client.describe_step() function.
    """
    job_flow_step = {
        "Name": "Example EMRFS Command Step",
        "ActionOnFailure": "CONTINUE",
        "HadoopJarStep": {
            "Jar": "command-runner.jar",
            "Args": ["/usr/bin/emrfs", command, bucket_url],
        },
    }

    try:
        response = emr_client.add_job_flow_steps(
            JobFlowId=cluster_id, Steps=[job_flow_step]
        )
        step_id = response["StepIds"][0]
        print(f"Added step {step_id} to cluster {cluster_id}.")
    except ClientError:
        print(f"Couldn't add a step to cluster {cluster_id}.")
        raise
    else:
        return step_id


def usage_demo():
    emr_client = boto3.client("emr")
    # Assumes the first waiting cluster has EMRFS enabled and has created metadata
    # with the default name of 'EmrFSMetadata'.
    cluster = emr_client.list_clusters(ClusterStates=["WAITING"])["Clusters"][0]
    add_emrfs_step(
        "sync", "s3://elasticmapreduce/samples/cloudfront", cluster["Id"], emr_client
    )


if __name__ == "__main__":
    usage_demo()
```

반환된 `step_id` 값을 사용하여 로그에서 작업 결과를 확인할 수 있습니다.

# Amazon S3에서 EMRFS 데이터에 대한 액세스 권한 부여
<a name="emr-plan-credentialsprovider"></a>

기본적으로 EC2의 EMR 역할에 따라 Amazon S3에서 EMRFS 데이터를 액세스할 수 있는 권한이 결정됩니다. EMRFS를 통해 요청을 수행하는 사용자나 그룹에 관계없이 이 역할에 연결된 IAM 정책이 적용됩니다. 기본값은 `EMR_EC2_DefaultRole`입니다. 자세한 내용은 [클러스터 EC2 인스턴스의 서비스 역할(EC2 인스턴스 프로파일)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)을 참조하세요.

Amazon EMR 릴리스 버전 5.10.0부터 보안 구성을 사용하여 EMRFS의 IAM 역할을 지정할 수 있습니다. 이 기능을 사용하면 사용자가 여러 명인 클러스터에서 Amazon S3에 대한 EMRFS 요청 권한을 사용자 지정할 수 있습니다. 사용자 및 그룹마다, 그리고 Amazon S3에서 접두사에 따라 Amazon S3 버킷 위치마다 다른 IAM 역할을 지정할 수 있습니다. EMRFS가 지정된 사용자, 그룹 또는 위치와 일치하는 Amazon S3에 대한 요청을 수행할 때 클러스터에서는 EC2의 EMR 역할 대신 사용자가 지정한 해당 역할을 사용합니다. 자세한 내용은 [Amazon S3에 대한 EMRFS 요청의 IAM 역할 구성](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-emrfs-iam-roles)을 참조하세요.

또는 Amazon EMR 솔루션의 요구가 EMRFS의 IAM 역할이 제공하는 범위를 벗어난 경우 사용자 지정 보안 인증 제공업체 클래스를 정의할 수 있기 때문에 Amazon S3에서 EMRFS 데이터에 대한 액세스 권한을 사용자가 지정할 수 있습니다.

## Amazon S3의 EMRFS 데이터에 대한 사용자 지정 보안 인증 제공업체 생성
<a name="emr-create-credentialsprovider"></a>

사용자 지정 자격 증명 공급자를 생성하려면 [AWSCredentialsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html) 및 Hadoop [구성 가능](https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/conf/Configurable.html) 클래스를 구현합니다.

이 접근 방식에 대한 자세한 설명은 빅 [데이터 블로그의 EMRFS를 사용하여 다른 AWS 계정의 데이터 보안 분석을](https://aws.amazon.com/blogs/big-data/securely-analyze-data-from-another-aws-account-with-emrfs) 참조하세요 AWS . 블로그 게시물에는 IAM 역할 생성부터 클러스터 시작에 이르기까지 전체 프로세스를 안내하는 자습서가 포함되어 있습니다. 이 게시물은 사용자 지정 자격 증명 공급자 클래스를 구현하는 Java 코드 예제도 제공합니다.

기본 단계는 다음과 같습니다.

**사용자 지정 자격 증명 공급자를 지정하려면**

1. JAR 파일로 컴파일된 사용자 지정 자격 증명 공급자 클래스를 생성합니다.

1. 스크립트를 부트스트랩 작업으로 실행해 사용자 지정 자격 증명 공급자 JAR 파일을 클러스터의 마스터 노드에 있는 `/usr/share/aws/emr/emrfs/auxlib` 위치로 복사합니다. 부트스트랩 작업에 대한 자세한 내용은 [(선택 사항)부트스트랩 작업을 생성하여 추가 소프트웨어 설치](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html)를 참조하세요.

1. `emrfs-site` 분류를 사용자 지정하여 JAR 파일에서 구현되는 클래스를 지정합니다. 애플리케이션을 사용자 지정하기 위해 구성 객체를 지정하는 방법에 대한 자세한 내용은 *Amazon EMR 릴리스 안내서*에서 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)을 참조하세요.

   다음 예제는 일반적인 구성 파라미터를 사용하여 Hive 클러스터를 시작하는 `create-cluster` 명령을 보여줍니다.
   + Amazon S3의 `amzn-s3-demo-bucket`에 저장되는 스크립트인 `copy_jar_file.sh`를 실행하는 부트스트랩 작업.
   + JAR 파일에 정의된 사용자 지정 자격 증명 공급자를 `emrfs-site`로 지정하는 `MyCustomCredentialsProvider` 분류
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

   ```
   aws emr create-cluster --applications Name=Hive \
   --bootstrap-actions '[{"Path":"s3://amzn-s3-demo-bucket/copy_jar_file.sh","Name":"Custom action"}]' \
   --ec2-attributes '{"KeyName":"MyKeyPair","InstanceProfile":"EMR_EC2_DefaultRole",\
   "SubnetId":"subnet-xxxxxxxx","EmrManagedSlaveSecurityGroup":"sg-xxxxxxxx",\
   "EmrManagedMasterSecurityGroup":"sg-xxxxxxxx"}' \
   --service-role EMR_DefaultRole_V2 --enable-debugging --release-label emr-7.12.0 \
   --log-uri 's3n://amzn-s3-demo-bucket/' --name 'test-awscredentialsprovider-emrfs' \
   --instance-type=m5.xlarge --instance-count 3  \
   --configurations '[{"Classification":"emrfs-site",\
   "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\
   "Configurations":[]}]'
   ```

# 기본 AWS Security Token Service 엔드포인트 관리
<a name="emr-emrfs-sts-endpoint"></a>

EMRFS는 AWS Security Token Service (STS)를 사용하여 AWS 리소스에 액세스하기 위해 임시 보안 자격 증명을 검색합니다. 이전 Amazon EMR 릴리스 버전은의 단일 글로벌 엔드포인트로 모든 AWS STS 요청을 보냅니다`https://sts.amazonaws.com`. Amazon EMR 릴리스 버전 5.31.0 및 6.1.0 이상에서는 리전 AWS STS 엔드포인트에 대신 요청합니다. 이렇게 하면 지연 시간이 줄어들고 세션 토큰 유효성이 개선됩니다. 엔드포인트에 대한 AWS STS 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [AWS 리전 AWS STS 에서 관리를](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) 참조하세요.

Amazon EMR 릴리스 버전 5.31.0 및 6.1.0 이상을 사용하는 경우 기본 AWS STS 엔드포인트를 재정의할 수 있습니다. 이렇게 하려면 `emrfs-site` 구성에서 `fs.s3.sts.endpoint` 속성을 변경해야 합니다.

다음 AWS CLI 예제에서는 EMRFS에서 사용하는 기본 AWS STS 엔드포인트를 글로벌 엔드포인트로 설정합니다.

```
aws emr create-cluster --release-label <emr-5.33.0> --instance-type m5.xlarge \
--emrfs Args=[fs.s3.sts.endpoint=https://sts.amazonaws.com]
```

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

또는 다음 예제를 사용하여 JSON 구성 파일을 생성하고 `--configurations`의 `emr create-cluster` 인수를 사용하여 지정할 수 있습니다. `--configurations,` 사용에 대한 자세한 내용은 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)를 참조하세요.

```
[
  {
    "classification": "emrfs-site",
    "properties": {
      "fs.s3.sts.endpoint": "https://sts.amazonaws.com"
    }
  }
]
```

# EMRFS 속성을 사용하여 Amazon S3 암호화 지정
<a name="emr-emrfs-encryption"></a>

**중요**  
Amazon EMR 릴리스 버전 4.8.0부터 보안 구성을 사용하여 더 쉽게 더 많은 옵션을 통해 암호화 설정을 적용할 수 있습니다. 보안 구성을 사용하는 것이 좋습니다. 자세한 내용은 [데이터 암호화 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-create-security-configuration.html#emr-security-configuration-encryption)을 참조하세요. 이 섹션에 설명되어 있는 콘솔 지침은 릴리스 버전 4.8.0 이하에서 사용이 가능합니다. AWS CLI 를 사용하여 클러스터 구성과 후속 버전의 보안 구성 모두에서 Amazon S3 암호화를 구성하는 경우 보안 구성이 클러스터 구성을 재정의합니다.

클러스터를 생성할 때 콘솔을 사용하거나 AWS CLI 또는 EMR SDK를 통해 `emrfs-site` 분류 속성을 사용하여 Amazon S3의 EMRFS 데이터에 대해 서버 측 암호화(SSE) 또는 클라이언트 측 암호화(CSE)를 지정할 수 있습니다. Amazon S3 SSE 및 CSE는 상호 배타적이므로 둘 중 하나를 선택할 수 있지만 둘 다 선택할 수는 없습니다.

 AWS CLI 지침은 아래 암호화 유형에 해당하는 섹션을 참조하세요.

**를 사용하여 EMRFS 암호화 옵션을 지정하려면 AWS Management Console**

1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 **이전 콘솔로 전환**을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 [이전 콘솔 사용](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)을 참조하세요.

1. **클러스터 생성** 및 **고급 옵션으로 이동**을 선택합니다.

1. **릴리스**로 4.7.2 이전 버전을 선택합니다.

1. **Software and Steps(소프트웨어 및 단계)**에서 애플리케이션에 적절한 다른 옵션을 선택하고 **다음**을 선택합니다.

1. **하드웨어** 및 **General Cluster Settings(일반 클러스터 설정)** 창에서 애플리케이션에 적절한 설정을 선택합니다.

1. **보안** 창의 **인증 및 암호화**에서 사용하고 싶은 **S3 Encryption (with EMRFS)(S3 암호화(EMRFS 사용))** 옵션을 선택합니다.
**참고**  
Amazon EMR 릴리스 버전 4.4 이하를 사용할 때는 **KMS 키 관리를 사용한 S3 서버 측 암호화**(SSE-KMS)를 사용할 수 없습니다.
   + **AWS Key Management**를 사용하는 옵션을 선택할 경우 **AWS KMS 키 ID**를 선택합니다. 자세한 내용은 [EMRFS 암호화 AWS KMS keys 에 사용](#emr-emrfs-awskms) 단원을 참조하십시오.
   + **S3 client-side encryption with custom materials provider(사용자 지정 자료 공급자를 사용한 S3 클라이언트 측 암호화)**를 선택한 경우에는 **클래스 이름**과 **JAR location(JAR 위치)**을 입력합니다. 자세한 내용은 [Amazon S3 클라이언트 측 암호화](emr-emrfs-encryption-cse.md) 단원을 참조하십시오.

1. 애플리케이션에 적절한 다른 옵션을 선택하고 **클러스터 생성**을 선택합니다.

## EMRFS 암호화 AWS KMS keys 에 사용
<a name="emr-emrfs-awskms"></a>

 AWS KMS 암호화 키는 Amazon EMR 클러스터 인스턴스 및 EMRFS와 함께 사용되는 Amazon S3 버킷과 동일한 리전에서 생성해야 합니다. 지정하는 키가 클러스터를 구성하는 데 사용하는 계정이 아닌 다른 계정에 있는 경우 ARN을 사용하여 해당 키를 지정해야 합니다.

Amazon EC2 인스턴스 프로파일의 역할에는 사용자가 지정하는 KMS를 사용할 수 있는 권한이 있어야 합니다. Amazon EMR에 있는 인스턴스 프로파일의 기본 역할은 `EMR_EC2_DefaultRole`입니다. 인스턴스 프로파일에 다른 역할을 사용하거나 Amazon S3에 대한 EMRFS 요청에 IAM 역할을 사용하는 경우 각 역할이 키 사용자로 적절히 추가되도록 해야 합니다. 이렇게 하면 해당 역할에 KMS 키를 사용할 수 있는 권한이 부여됩니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [Using Key Policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users) 및 [Amazon S3에 대한 EMRFS 요청의 IAM 역할 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)을 참조하세요.

 AWS Management Console 를 사용하여 지정된 KMS 키의 키 사용자 목록에 인스턴스 프로파일 또는 EC2 인스턴스 프로파일을 추가하거나 AWS CLI 또는 AWS SDK를 사용하여 적절한 키 정책을 연결할 수 있습니다.

Amazon EMR은 [대칭 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)만 지원합니다. [비대칭 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks)를 사용하여 Amazon EMR 클러스터의 저장된 데이터를 암호화할 수 없습니다. KMS 키가 대칭인지 비대칭인지 확인하는 것과 관련된 도움말은 [Identifying symmetric and asymmetric KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)를 참조하세요.

아래 절차에서는 AWS Management Console을 사용하여 기본 Amazon EMR 인스턴스 프로파일(`EMR_EC2_DefaultRole`)을 *키 사용자*로 추가하는 방법을 설명합니다. 이때 KMS 키를 이미 생성했다고 가정합니다. 새 KMS 키를 생성하려면 *AWS Key Management Service 개발자 안내서*에서 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요.

**Amazon EMR의 EC2 인스턴스 프로파일을 암호화 키 사용자 목록에 추가하는 방법**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) AWS Key Management Service (AWS KMS) 콘솔을 엽니다.

1. 를 변경하려면 페이지 오른쪽 상단의 리전 선택기를 AWS 리전사용합니다.

1. 수정할 KMS 키의 별칭을 선택합니다.

1. 키 세부 정보 페이지의 **Key Users(키 사용자)**에서 **Add(추가)**를 선택합니다.

1. **Add key users(키 사용자 추가)** 대화 상자에서 적절한 역할을 선택합니다. 기본 역할의 이름은 `EMR_EC2_DefaultRole`입니다.

1. **추가**를 선택합니다.

## Amazon S3 서버 측 암호화
<a name="emr-emrfs-encryption-sse"></a>

모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며, Amazon S3 버킷에 업로드되는 모든 새 객체는 저장 시 자동으로 암호화됩니다. Amazon S3는 데이터를 디스크에 쓸 때 객체 수준에서 데이터를 암호화하고 액세스 시 데이터를 해독합니다. SSE에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

Amazon EMR에서 SSE를 지정할 때 다음 두 가지 키 관리 시스템 중에서 선택할 수 있습니다.
+ **SSE-S3** - Amazon S3에서 자동으로 키를 관리합니다.
+ **SSE-KMS** - AWS KMS key 를 사용하여 Amazon EMR에 적합한 정책을 설정합니다. Amazon EMR의 키 요구 사항에 대한 자세한 내용은 [암호화 AWS KMS keys 에 사용을](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys) 참조하세요.

고객 제공 키를 사용하는 SSE(SSE-C)는 Amazon EMR에서 사용할 수 없습니다.

**를 사용하여 SSE-S3가 활성화된 클러스터를 생성하려면 AWS CLI**
+ 다음 명령을 입력합니다.

  ```
  aws emr create-cluster --release-label emr-4.7.2 or earlier \
  --instance-count 3 --instance-type m5.xlarge --emrfs Encryption=ServerSide
  ```

`emrfs-site` 속성에서 fs.s3.enableServerSideEncryption 속성을 true로 설정하여 SSE-S3을 활성화할 수도 있습니다. 아래의 SSE-KMS 예제를 참조하여 키 ID에 대한 속성을 생략하세요.

**를 사용하여 SSE-KMS가 활성화된 클러스터를 생성하려면 AWS CLI**
**참고**  
SSE-KMS는 Amazon EMR 릴리스 버전 4.5.0 이상에서만 사용이 가능합니다.
+ 다음 AWS CLI 명령을 입력하여 SSE-KMS로 클러스터를 생성합니다. 여기서 *keyID*는 *a4567b8-9900-12ab-1234-123a45678901* AWS KMS key과 같은 입니다.

  ```
  aws emr create-cluster --release-label emr-4.7.2 or earlier --instance-count 3 \
  --instance-type m5.xlarge --use-default-roles \
  --emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryption.kms.keyId=keyId]
  ```

  **--또는--**

  `emrfs-site` 분류를 사용하여 다음 AWS CLI 명령을 입력하고 아래 예제와 유사한 내용이 포함된 구성 JSON 파일을 제공합니다`myConfig.json`.

  ```
  aws emr create-cluster --release-label emr-4.7.2 or earlier --instance-count 3 --instance-type m5.xlarge --applications Name=Hadoop --configurations file://myConfig.json --use-default-roles
  ```

  다음은 **myConfig.json** 콘텐츠 예제입니다.

  ```
  [
    {
      "Classification":"emrfs-site",
      "Properties": {
         "fs.s3.enableServerSideEncryption": "true",
         "fs.s3.serverSideEncryption.kms.keyId":"a4567b8-9900-12ab-1234-123a45678901"
      }
    }
  ]
  ```

### SSE-S3 및 SSE-KMS의 구성 속성
<a name="emr-emrfs-encryption-site-sse-properties"></a>

`emrfs-site` 구성 분류를 사용하여 이들 속성을 구성할 수 있습니다. SSE-KMS는 Amazon EMR 릴리스 버전 4.5.0 이상에서만 사용이 가능합니다.


| 속성  | 기본값  | 설명  | 
| --- | --- | --- | 
| fs.s3.enableServerSideEncryption | false |  **true**로 설정할 경우 Amazon S3에 저장된 객체가 서버 측 암호화를 사용하여 암호화됩니다. 키를 지정하지 않으면 SSE-S3가 사용됩니다.  | 
| fs.s3.serverSideEncryption.kms.keyId | n/a |   AWS KMS 키 ID 또는 ARN을 지정합니다. 키를 지정하면 SSE-KMS가 사용됩니다.  | 

# Amazon S3 클라이언트 측 암호화
<a name="emr-emrfs-encryption-cse"></a>

Amazon S3 클라이언트 측 암호화를 사용하면 클러스터의 EMRFS 클라이언트에서 Amazon S3 암호화 및 암호 해독이 수행됩니다. 객체는 Amazon S3에 업로드되기 전에 암호화되고 다운로드된 후 암호 해독됩니다. 지정하는 공급자는 클라이언트가 사용하는 암호화 키를 제공합니다. 클라이언트는 AWS KMS 에서 제공하는 키(CSE-KMS) 또는 클라이언트 측 루트 키(CSE-C)를 제공하는 사용자 지정 Java 클래스를 사용할 수 있습니다. 암호화 세부 사항은 지정된 공급자 및 암호 해독되거나 암호화되는 객체의 메타데이터에 따라 CSE-KMS 및 CSE-C 간에 약간 다릅니다. 이러한 차이에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [클라이언트 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)를 참조하세요.

**참고**  
Amazon S3 CSE는 Amazon S3와 교환하는 EMRFS 데이터만 암호화하며, 클러스터 인스턴스 볼륨에 있는 모든 데이터를 암호화하지는 않습니다. 뿐만 아니라, Hue에서 EMRFS가 사용되지 않으므로 Hue S3 파일 검색기를 사용하여 Amazon S3에 작성된 객체는 암호화되지 않습니다.

**를 사용하여 Amazon S3에서 EMRFS 데이터에 대한 CSE-KMS를 지정하려면 AWS CLI**
+ 다음 명령을 입력하고 *MyKMSKeyID*를 사용할 KMS 키의 키 ID나 ARN으로 바꿉니다.

  ```
  aws emr create-cluster --release-label emr-4.7.2 or earlier
  --emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
  ```

## 사용자 지정 키 공급자 생성
<a name="emr-emrfs-create-cse-key"></a>

사용자 지정 키 제공업체를 생성할 때 사용하는 암호화 유형에 따라 애플리케이션은 서로 다른 EncryptionMaterialsProvider 인터페이스도 구현해야 합니다. 두 인터페이스 모두 AWS SDK for Java 버전 1.11.0 이상에서 사용할 수 있습니다.
+ Amazon S3 암호화를 구현하려면 [ com.amazonaws.services.s3.model.EncryptionMaterialsProvider 인터페이스](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/EncryptionMaterialsProvider.html)를 사용합니다.
+ 로컬 디스크 암호화를 구현하려면 [ com.amazonaws.services.elasticmapreduce.spi.security.EncryptionMaterialsProvider 인터페이스](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/EncryptionMaterialsProvider.html)를 사용합니다.

이 구현을 위해 암호화 구성 요소를 제공하도록 임의의 모든 전략을 사용할 수 있습니다. 예를 들어, 정적 암호화 구성 요소를 제공하거나 더 복잡한 키 관리 시스템과 통합하도록 선택할 수 있습니다.

Amazon S3 암호화를 사용하는 경우 사용자 지정 암호화 구성 요소에 대해 암호화 알고리즘 **AES/GCM/NoPadding**을 사용해야 합니다.

로컬 디스크 암호화를 사용하는 경우 사용자 지정 암호화 구성 요소에 사용할 암호화 알고리즘은 EMR 릴리스에 따라 다릅니다. Amazon EMR 7.0.0 이하의 경우 **AES/GCM/NoPadding**을 사용해야 합니다. Amazon EMR 7.1.0 이상의 경우 **AES**를 사용해야 합니다.

EncryptionMaterialsProvider 클래스는 암호화 컨텍스트별로 암호화 자료를 가져옵니다. Amazon EMR은 직접 호출자가 반환할 올바른 암호화 자료를 결정하는 데 도움이 되도록 런타임에 암호화 컨텍스트 정보를 채웁니다.

**Example 예: EMRFS에서 Amazon S3 암호화를 위해 사용자 지정 키 공급자 사용**  
Amazon EMR이 EncryptionMaterialsProvider 클래스에서 암호화 구성 요소를 가져와서 암호화를 수행할 때 EMRFS는 선택적으로 materialsDescription 인수를 객체의 Amazon S3 URI 및 클러스터의 JobFlowId라는 두 개의 필드로 채웁니다. 이러한 필드는 EncryptionMaterialsProvider 클래스에서 암호화 구성 요소를 선택적으로 반환하기 위해 사용할 수 있습니다.  
예를 들어, 공급자는 Amazon S3 URI 접두사마다 다른 키를 반환할 수 있습니다. Amazon S3 객체에 저장되는 것은 EMRFS에서 생성되어 공급자에게 전달되는 materialsDescription 값이 아니라 반환되는 암호화 구성 요소에 대한 설명입니다. Amazon S3 객체를 암호 해독하는 동안, 암호화 구성 요소 설명이 EncryptionMaterialsProvider 클래스에 전달되므로, 이 경우에도 일치하는 키를 반환하여 객체를 암호 해독할 수 있습니다.  
EncryptionMaterialsProvider 참조 구현은 아래에 제공됩니다. 또 다른 사용자 지정 공급자인 [EMRFSRSAEncryptionMaterialsProvider](https://github.com/awslabs/emr-sample-apps/tree/master/emrfs-plugins/EMRFSRSAEncryptionMaterialsProvider)는 GitHub에서 사용할 수 있습니다.  

```
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.EncryptionMaterialsProvider;
import com.amazonaws.services.s3.model.KMSEncryptionMaterials;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;

import java.util.Map;

/**
 * Provides KMSEncryptionMaterials according to Configuration
 */
public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{
  private Configuration conf;
  private String kmsKeyId;
  private EncryptionMaterials encryptionMaterials;

  private void init() {
    this.kmsKeyId = conf.get("my.kms.key.id");
    this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId);
  }

  @Override
  public void setConf(Configuration conf) {
    this.conf = conf;
    init();
  }

  @Override
  public Configuration getConf() {
    return this.conf;
  }

  @Override
  public void refresh() {

  }

  @Override
  public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) {
    return this.encryptionMaterials;
  }

  @Override
  public EncryptionMaterials getEncryptionMaterials() {
    return this.encryptionMaterials;
  }
}
```

## 를 사용하여 사용자 지정 재료 공급자 지정 AWS CLI
<a name="emr-emrfs-encryption-cse-custom-cli"></a>

 AWS CLI를 사용하려면 `Encryption`, `ProviderType`, `CustomProviderClass` 및`CustomProviderLocation` 인수를 `emrfs` 옵션으로 전달합니다.

```
aws emr create-cluster --instance-type m5.xlarge --release-label emr-4.7.2 or earlier --emrfs Encryption=ClientSide,ProviderType=Custom,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/provider.jar,CustomProviderClass=classname
```

`Encryption`을 `ClientSide`로 설정하면 클라이언트 측 암호화가 활성화됩니다. `CustomProviderClass`는 `EncryptionMaterialsProvider`객체의 이름이고 `CustomProviderLocation`은 Amazon EMR이 `CustomProviderClass`를 클러스터의 각 노드로 복사하여 클래스 경로에 저장하는 로컬 또는 Amazon S3 위치입니다.

## SDK를 사용하여 사용자 지정 자격 공급자 지정
<a name="emr-emrfs-encryption-cse-custom-sdk"></a>

SDK를 사용하려면 먼저 `fs.s3.cse.encryptionMaterialsProvider.uri` 속성을 설정하여 Amazon S3에 저장하는 사용자 지정 `EncryptionMaterialsProvider` 클래스를 클러스터의 각 노드로 다운로드합니다. 그런 다음 사용자 지정 공급자의 올바른 위치 및 CSE 활성화와 함께 `emrfs-site.xml` 파일에서 이 동작을 구성합니다.

예를 들어 RunJobFlowRequest를 AWS SDK for Java 사용하는에서 코드는 다음과 같을 수 있습니다.

```
<snip>
		Map<String,String> emrfsProperties = new HashMap<String,String>();
	    	emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider.uri","s3://amzn-s3-demo-bucket/MyCustomEncryptionMaterialsProvider.jar");
	    	emrfsProperties.put("fs.s3.cse.enabled","true");
	    	emrfsProperties.put("fs.s3.consistent","true");
		    emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider","full.class.name.of.EncryptionMaterialsProvider");

		Configuration myEmrfsConfig = new Configuration()
	    	.withClassification("emrfs-site")
	    	.withProperties(emrfsProperties);

		RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("Custom EncryptionMaterialsProvider")
			.withReleaseLabel("emr-7.12.0")
			.withApplications(myApp)
			.withConfigurations(myEmrfsConfig)
			.withServiceRole("EMR_DefaultRole_V2")
			.withJobFlowRole("EMR_EC2_DefaultRole")
			.withLogUri("s3://myLogUri/")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myEc2Key")
				.withInstanceCount(2)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m5.xlarge")
				.withSlaveInstanceType("m5.xlarge")
			);						
					
		RunJobFlowResult result = emr.runJobFlow(request);
</snip>
```

## 사용자 지정 EncryptionMaterialsProvider(인수 포함)
<a name="emr-emrfs-encryption-custommaterials"></a>

공급자에게 직접 인수를 전달해야 할 수 있습니다. 이를 위해 사용자 지정 인수를 속성으로 정의한 상태에서 `emrfs-site` 구성 분류를 사용할 수 있습니다. 구성의 예제는 아래와 같습니다(파일 `myConfig.json`로 저장).

```
[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "myProvider.arg1":"value1",
	    "myProvider.arg2":"value2"
      }
    }
 ]
```

의 `create-cluster` 명령을 사용하여 옵션을 사용하여 아래와 같이 파일을 `--configurations` 지정할 AWS CLI수 있습니다.

```
aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge --instance-count 2 --configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar,CustomProviderClass=classname
```

## EMRFS S3EC V2 지원 구성
<a name="emr-emrfs-encryption-cse-s3v2"></a>

S3 Java SDK 릴리스(1.11.837 이상)에서 다양한 보안 개선 사항과 함께 암호화 클라이언트 버전 2(S3EC V2)를 지원합니다. 자세한 내용은 S3 블로그 게시물 [Updates to the Amazon S3 encryption client](https://aws.amazon.com/blogs/developer/updates-to-the-amazon-s3-encryption-client/)를 참조하세요. 또한 AWS SDK for Java 개발자 안내서의 [Amazon S3 암호화 클라이언트 마이그레이션](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/s3-encryption-migration.html)을 참조하세요.

암호화 클라이언트 V1은 이전 버전과의 호환성을 위해 SDK에서 계속 사용할 수 있습니다. 기본적으로 EMRFS는 CSE가 활성화된 경우 S3EC V1을 사용하여 S3 객체를 암호화하고 해독합니다.

릴리스 버전이 emr-5.31.0 이전(emr-5.30.1 이하, emr-6.1.0 이하)인 EMR 클러스터에서는 S3EC V2로 암호화된 S3 객체를 EMRFS로 해독할 수 없습니다.

**Example S3EC V2를 사용하도록 EMRFS 구성**  
S3EC V2를 사용하도록 EMRFS를 구성하려면 다음 구성을 추가합니다.  

```
{
  "Classification": "emrfs-site",
  "Properties": {
    "fs.s3.cse.encryptionV2.enabled": "true"
  }
}
```

## Amazon S3 클라이언트 측 암호화에 대한 `emrfs-site.xml` 속성
<a name="emr-emrfs-cse-config"></a>


| 속성  | 기본값  | 설명  | 
| --- | --- | --- | 
| fs.s3.cse.enabled | false |  **true**로 설정할 경우 Amazon S3에 저장된 EMRFS 객체가 클라이언트 측 암호화를 사용하여 암호화됩니다.  | 
| fs.s3.cse.encryptionV2.enabled | false |  `true`로 설정할 경우 EMRFS는 S3 암호화 클라이언트 버전 2를 사용하여 S3의 객체를 암호화하고 해독합니다. Amazon EMR 버전 5.31.0 이상에서 사용할 수 있습니다.  | 
| fs.s3.cse.encryptionMaterialsProvider.uri | N/A | 사용자 지정 암호화 자료를 사용할 때 이렇게 설정합니다. EncryptionMaterialsProvider가 있는 JAR이 위치한 Amazon S3 URI. 이 URI를 제공할 경우 Amazon EMR에서 클러스터의 모든 노드에 JAR을 자동으로 다운로드합니다. | 
| fs.s3.cse.encryptionMaterialsProvider | N/A |  클라이언트 측 암호화에 사용되는 `EncryptionMaterialsProvider` 클래스 경로입니다. CSE-KMS를 사용하여 `com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider`를 지정합니다.  | 
| fs.s3.cse.materialsDescription.enabled | false |  `true`로 설정할 경우 암호화된 객체의 materialsDescription이 객체의 Amazon S3 URI와 JobFlowId로 채워집니다. 사용자 지정 암호화 자료를 사용할 때 `true`로 설정합니다.  | 
| fs.s3.cse.kms.keyId | N/A |  CSE-KMS를 사용할 때 적용됩니다. 암호화에 사용되는 KMS 키의 KeyId, ARN 또는 별칭에 대한 값.  | 
| fs.s3.cse.cryptoStorageMode | ObjectMetadata  |  Amazon S3 스토리지 모드. 기본적으로 암호화 정보의 설명은 객체 메타데이터에 저장됩니다. 지침 파일에 설명을 저장할 수도 있습니다. 유효한 값은 ObjectMetadata 및 InstructionFile입니다. 자세한 내용은 [AWS SDK for Java 및 Amazon S3를 사용한 클라이언트 측 데이터 암호화를](https://aws.amazon.com/articles/client-side-data-encryption-with-the-aws-sdk-for-java-and-amazon-s3/) 참조하세요.  | 