

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

# Amazon EMR 클러스터 위치 및 데이터 스토리지 구성
<a name="emr-cluster-location-data-storage"></a>

이 섹션에서는 클러스터의 리전을 구성하는 방법, Amazon EMR을 사용할 때 사용 가능한 다양한 파일 시스템 및 그러한 파일 시스템의 사용 방법을 설명합니다. 또한 필요할 경우 Amazon EMR로 데이터를 업로드하거나 준비하는 방법 및 구성할 모든 출력 데이터 및 로그 파일의 출력 위치를 준비하는 방법을 설명합니다.

**Topics**
+ [Amazon EMR 클러스터의 AWS 리전 선택](emr-plan-region.md)
+ [Amazon EMR에서 스토리지 및 파일 시스템 작업](emr-plan-file-systems.md)
+ [Amazon EMR에서 처리할 입력 데이터 준비](emr-plan-input.md)
+ [Amazon EMR 클러스터 출력 위치 구성](emr-plan-output.md)

# Amazon EMR 클러스터의 AWS 리전 선택
<a name="emr-plan-region"></a>

Amazon Web Services는 전 세계의 데이터 센터에 있는 서버에서 실행됩니다. 데이터 센터는 지리적 리전별로 구성됩니다. Amazon EMR 클러스터를 시작할 때 리전을 지정해야 합니다. 지연 시간을 단축하고, 비용을 최소화하며, 규정 요구 사항을 준수하기 위해 리전을 선택할 수 있습니다. 모든 Amazon EMR 지원 리전 및 엔드포인트 목록은 **Amazon Web Services 일반 참조에서 [리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/#emr_region)를 참조하세요.

최상의 성능을 내려면 데이터와 동일한 리전에서 클러스터를 시작해야 합니다. 예를 들어, 입력 데이터를 저장하는 Amazon S3 버킷이 미국 서부(오리건) 리전에 있는 경우, 리전 간 데이터 전송 요금이 발생하지 않도록 하려면 미국 서부(오리건) 리전에서 클러스터를 시작해야 합니다. Amazon S3 버킷을 사용하여 클러스터의 출력을 받는 경우, 미국 서부(오리건) 리전에 이를 생성할 수도 있습니다.

Amazon EC2 키 페어와 클러스터를 연결하려는 경우(SSH를 사용하여 프라이머리 노드에 로그온하기 위해 필요함), 키 페어를 클러스터와 동일한 리전에 생성해야 합니다. 마찬가지로 클러스터를 관리하기 위해 Amazon EMR이 생성하는 보안 그룹은 클러스터와 동일한 리전에 생성됩니다.

2017년 5월 17일 이후에 AWS 계정 에 가입한 경우에서 AWS Management Console 리소스에 액세스할 때 기본 리전은 미국 동부(오하이오)(us-east-2)입니다. 이전 계정의 경우 기본 리전은 미국 서부(오레곤)(us-west-2) 또는 미국 동부(버지니아 북부)(us-east-1)입니다. 자세한 설명은 [리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html)를 참조하세요.

일부 AWS 기능은 제한된 리전에서만 사용할 수 있습니다. 예를 들어, 클러스터 컴퓨팅 인스턴스는 미국 동부(버지니아 북부) 리전에서만 사용 가능하며, 아시아 태평양(시드니) 리전은 Hadoop 1.0.3 이상만 지원합니다. 리전을 선택할 때는 사용하려는 기능을 지원하는지 확인합니다.

최상의 성능을 위해 클러스터와 함께 사용할 모든 AWS 리소스에 동일한 리전을 사용합니다. 다음 테이블에는 서비스 간의 리전 매핑이 나와 있습니다. Amazon EMR 리전 목록은 **Amazon Web Services 일반 참조에서 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#emr_region)를 참조하세요.

## 콘솔을 사용하여 리전 선택
<a name="emr-dev-specify-region-console"></a>

기본 리전은 탐색 표시줄의 계정 정보 왼쪽에 표시됩니다. 새 콘솔과 이전 콘솔 모두에서 리전을 전환하려면 리전 드롭다운 메뉴를 선택하고 새 옵션을 선택합니다.

## 를 사용하여 리전 지정 AWS CLI
<a name="emr-dev-specify-region-cli"></a>

**aws configure** 명령 또는 `AWS_DEFAULT_REGION` 환경 변수를 AWS CLI 사용하여에서 기본 리전을 지정합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*[의 AWS 리전 구성을](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-installing-specifying-region) 참조하세요.

## SDK 또는 API를 사용하여 리전 선택
<a name="emr-dev-specify-region-api"></a>

SDK를 사용하여 리전을 선택하려면 리전의 엔드포인트를 사용하도록 애플리케이션을 구성합니다. AWS SDK를 사용하여 클라이언트 애플리케이션을 생성하는 경우, 다음 예제와 같이 `setEndpoint`를 직접 호출하여 클라이언트 엔드포인트를 변경할 수 있습니다.

```
1. client.setEndpoint("elasticmapreduce.us-west-2.amazonaws.com");
```

엔드포인트를 설정하여 애플리케이션에 리전을 지정한 후, 클러스터의 EC2 인스턴스에 대한 가용 영역을 설정할 수 있습니다. 가용 영역은 다른 가용 영역에 장애가 발생할 경우 분리되도록 설계된 개별적인 지리적 지점으로서, 동일 리전 내의 다른 가용 영역에 저렴하고, 지연 시간이 짧은 네트워크 연결을 제공합니다. 한 리전에는 하나 이상의 가용 영역이 있습니다. 성능을 최적화하고 지연 시간을 줄이려면, 리소스를 사용하는 클러스터와 동일한 가용 영역에 모든 리소스가 있어야 합니다.

# Amazon EMR에서 스토리지 및 파일 시스템 작업
<a name="emr-plan-file-systems"></a>

Amazon EMR과 Hadoop은 클러스터 단계를 처리할 때 사용할 수 있는 다양한 파일 시스템을 제공합니다. 데이터에 액세스하는 데 사용된 URI의 접두사를 기준으로 어떤 파일 시스템을 사용할지를 지정합니다. 예를 들어, `s3://amzn-s3-demo-bucket1/path`은 S3A(EMR-7.10.0 릴리스 이후)를 사용하여 Amazon S3 버킷을 참조합니다. 다음 표에서는 사용 가능한 파일 시스템과 언제 각 파일 시스템을 가장 적합하게 사용할 수 있는지에 대한 권장 사항이 나열됩니다.

Amazon EMR과 Hadoop은 클러스터를 처리할 때 일반적으로 다음 파일 시스템 중 두 개 이상을 사용합니다. Amazon EMR과 함께 사용되는 두 개의 기본 파일 시스템은 HDFS 및 S3A입니다.

**중요**  
Amazon EMR 릴리스 5.22.0부터 Amazon EMR은 AWS 서명 버전 4만 사용하여 Amazon S3에 대한 요청을 인증합니다. 이전 Amazon EMR 릴리스는 경우에 따라 AWS 서명 버전 4만 사용된다는 릴리스 정보가 표시되지 않는 한 서명 버전 2를 사용합니다. 자세한 내용은 *Amazon Simple Storage Service 개발자 안내서*의 [요청 인증(AWS 서명 버전 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) 및 [요청 인증(AWS 서명 버전 2)](https://docs.aws.amazon.com/AmazonS3/latest/API/auth-request-sig-v2.html)을 참조하세요.


| 파일 시스템 | 접두사  | 설명 | 
| --- | --- | --- | 
| HDFS | hdfs://(또는 접두사 없음) |  HDFS는 확장 가능하고 이동 가능한 Hadoop용 분산 파일 시스템입니다. HDFS의 이점은 클러스터를 관리하는 Hadoop 클러스터 노드와 개별 단계를 관리하는 Hadoop 클러스터 노드 간의 데이터 인식입니다. 자세한 내용은 [Hadoop 설명서](http://hadoop.apache.org/docs/stable)를 참조하세요. HDFS는 마스터 및 코어 노드에서 사용됩니다. 한 가지 장점은 빠르다는 것이고, 단점은 클러스터가 종료될 때 회수되는 휘발성 스토리지라는 것입니다. 이 스토리지는 중간 작업 흐름 단계에서 생성된 결과를 캐시하는 데 가장 적합합니다.  | 
| S3A | s3://, s3a://, s3n:// |  Hadoop Amazon S3A 파일 시스템은 Apache Hadoop 및 해당 에코시스템이 Amazon S3 스토리지와 직접 상호 작용할 수 있도록 하는 오픈 소스 Amazon S3 커넥터입니다. 이를 통해 사용자는 Hadoop 호환 파일 작업을 사용하여 S3 버킷에 데이터를 읽고 쓸 수 있으므로 Hadoop 애플리케이션과 클라우드 스토리지 간에 원활하게 통합할 수 있습니다. EMR-7.10.0 이전에 Amazon EMR은 *s3://* 및 *s3n://* 스키마에 EMRFS를 사용했습니다.   | 
| 로컬 파일 시스템 |  |  로컬 파일 시스템은 로컬로 연결된 디스크를 참조합니다. Hadoop 클러스터를 생성할 때 *인스턴스 스토어*라는 미리 연결된 디스크 스토리지의 사전 구성된 블록과 함께 제공되는 EC2 인스턴스에서 각 노드가 생성됩니다. 인스턴스 스토어 볼륨의 데이터는 EC2 인스턴스의 수명 동안에만 유지됩니다. 인스턴스 스토어 볼륨은 버퍼, 캐시, 스크래치 데이터 및 기타 임시 콘텐츠와 같이 지속적으로 변경되는 임시 데이터를 저장하는 데 적합합니다. 자세한 내용은 [Amazon EC2 인스턴스 스토리지](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)를 참조하세요. 로컬 파일 시스템은 HDFS에서 사용되지만 Python은 로컬 파일 시스템에서도 실행되므로 인스턴스 스토어 볼륨에 추가 애플리케이션 파일을 저장하도록 선택할 수 있습니다.  | 
| (레거시) Amazon S3 블록 파일 시스템 | s3bfs:// |  Amazon S3 블록 파일 시스템은 레거시 파일 스토리지 시스템입니다. 이 시스템은 사용하지 않는 것이 좋습니다.  클러스터 장애의 원인이 될 수 있는 경합 상태를 트리거할 수 있으므로 이 파일 시스템을 사용하지 않는 것이 좋습니다. 하지만 이 시스템은 레거시 애플리케이션에서 필요할 수 있습니다.   | 

## 파일 시스템에 액세스
<a name="emr-dev-access-file-systems"></a>

데이터에 액세스하는 데 사용된 URI(Uniform Resource Identifier)의 접두사를 기준으로 어떤 파일 시스템을 사용할지를 지정합니다. 다음 절차에서는 다양한 유형의 파일 시스템을 참조하는 방법을 설명합니다.

**로컬 HDFS에 액세스하려면**
+ URI에 `hdfs:///` 접두사를 지정합니다. Amazon EMR은 URI에 접두사를 지정하지 않은 경로를 로컬 HDFS로 확인합니다. 예를 들어, 다음 두 개의 URI는 HDFS에서 모두 동일한 위치로 확인됩니다.

  ```
  1. hdfs:///path-to-data
  2. 							
  3. /path-to-data
  ```

**원격 HDFS에 액세스하려면**
+ 다음 예제와 같이 마스터 노드의 IP 주소를 URI에 포함시킵니다.

  ```
  1. hdfs://master-ip-address/path-to-data
  2. 						
  3. master-ip-address/path-to-data
  ```

**Amazon S3에 액세스하는 방법**
+ `s3://` 접두사를 사용합니다.

  ```
  1. 						
  2. s3://bucket-name/path-to-file-in-bucket
  ```

**Amazon S3 블록 파일 시스템에 액세스하는 방법**
+ Amazon S3 블록 파일 시스템이 필요한 레거시 애플리케이션에만 사용합니다. 이 파일 시스템을 사용하여 데이터에 액세스하거나 저장하려면 URI에 `s3bfs://` 접두사를 사용합니다.

  Amazon S3 블록 파일 시스템은 크기가 5GB를 초과하는 파일을 Amazon S3에 업로드할 수 있도록 지원하기 위해 사용되었던 레거시 파일 시스템입니다. Amazon EMR이 AWS Java SDK를 통해 제공하는 멀티파트 업로드 기능을 사용하면 대용량 파일을 Amazon S3 네이티브 파일 시스템에 업로드할 수 있으며 Amazon S3 블록 파일 시스템은 더 이상 사용되지 않습니다. EMR용 멀티파트 업로드에 대한 자세한 내용은 [ Amazon S3용 멀티파트 업로드 구성을 참조하세요](emr-plan-upload-s3.html#Config_Multipart). Amazon S3 객체 크기 및 부분 크기 제한에 대한 자세한 내용은 **Amazon Simple Storage Service** *사용 설명서*의 [Amazon S3 멀티파트 업로드 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html)을 참조하세요.
**주의**  
이 레거시 파일 시스템에서는 파일 시스템을 손상시킬 수 있는 경합 상태가 발생할 수 있기 때문에 이 형식을 사용하지 말고 대신 EMRFS를 사용해야 합니다.

  ```
  1. s3bfs://bucket-name/path-to-file-in-bucket
  ```

# Amazon EMR에서 처리할 입력 데이터 준비
<a name="emr-plan-input"></a>

대부분의 클러스터는 입력 데이터를 로드한 다음 해당 데이터를 처리합니다. 데이터를 로드하려면 데이터는 클러스터가 액세스할 수 있는 위치에 있어야 하며 클러스터가 처리할 수 있는 형식이어야 합니다. 가장 일반적인 시나리오는 입력 데이터를 Amazon S3에 업로드하는 것입니다. Amazon EMR은 클러스터가 Amazon S3에서 데이터를 가져오거나 읽을 수 있는 도구를 제공합니다.

Hadoop에서 기본 입력 형식은 텍스트 파일이지만, Hadoop을 사용자 지정할 수 있으며 도구를 사용하여 다른 형식으로 저장된 데이터를 가져올 수 있습니다.

**Topics**
+ [Amazon EMR에서 허용할 수 있는 입력 유형](emr-plan-input-accept.md)
+ [Amazon EMR로 데이터를 가져오는 다양한 방법](emr-plan-get-data-in.md)

# Amazon EMR에서 허용할 수 있는 입력 유형
<a name="emr-plan-input-accept"></a>

클러스터의 기본 입력 형식은 각 줄이 줄 바꿈(\$1n) 문자로 구분되는 텍스트 파일로, 이 형식은 가장 일반적으로 사용되는 입력 형식입니다.

입력 데이터가 기본 텍스트 파일 이외의 다른 형식인 경우 Hadoop 인터페이스 `InputFormat`을 사용하여 다른 입력 형식을 지정할 수 있습니다. 사용자 지정 데이터 유형을 처리하기 위해 `FileInputFormat` 클래스의 하위 클래스를 만들 수도 있습니다. 자세한 내용은 [http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/InputFormat.html](http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/InputFormat.html)을 참조하세요.

Hive를 사용 중인 경우 serializer/deserializer(SerDe)를 사용하여 지정된 형식의 데이터를 HDFS로 읽을 수 있습니다. 자세한 내용은 [https://cwiki.apache.org/confluence/display/Hive/SerDe](https://cwiki.apache.org/confluence/display/Hive/SerDe)를 참조하세요.

# Amazon EMR로 데이터를 가져오는 다양한 방법
<a name="emr-plan-get-data-in"></a>

Amazon EMR은 데이터를 클러스터로 가져오는 여러 가지 방법을 제공합니다. 가장 일반적인 방법은 데이터를 Amazon S3에 업로드하고 Amazon EMR의 기본 제공 기능을 사용하여 데이터를 클러스터에 로드하는 것입니다. Hadoop의 DistributedCache 기능을 사용하여 분산 파일 시스템에서 로컬 파일 시스템으로 파일을 전송할 수도 있습니다. Amazon EMR에서 제공하는 Hive 구현(Hive 버전 0.7.1.1 이상)에는 DynamoDB와 Amazon EMR 클러스터 간에 데이터를 가져오고 내보내기 위해 사용할 수 있는 기능이 포함됩니다. 대량의 온프레미스 데이터를 처리해야 하는 경우 Direct Connect 서비스가 유용할 수 있습니다.

**Topics**
+ [Amazon S3로 데이터 업로드](emr-plan-upload-s3.md)
+ [를 사용하여 데이터 업로드 AWS DataSync](emr-plan-upload-datasync.md)
+ [Amazon EMR에서 분산 캐시를 사용하여 파일 가져오기](emr-plan-input-distributed-cache.md)
+ [Amazon EMR을 사용하여 압축 파일 탐지 및 처리](HowtoProcessGzippedFiles.md)
+ [Amazon EMR을 사용하여 DynamoDB 데이터를 Hive로 가져오기](emr-plan-input-dynamodb.md)
+ [Amazon EMR AWS Direct Connect 에서를 사용하여 데이터에 연결](emr-plan-input-directconnect.md)
+ [를 사용하여 Amazon EMR에 대량의 데이터 업로드 AWS Snowball Edge](emr-plan-input-snowball.md)

# Amazon S3로 데이터 업로드
<a name="emr-plan-upload-s3"></a>

객체를 Amazon S3에 업로드하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [버킷에 객체 추가](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html)를 참조하세요. Hadoop에서 Amazon S3를 사용하는 방법에 대한 자세한 내용은 [http://wiki.apache.org/hadoop/AmazonS3](http://wiki.apache.org/hadoop2/AmazonS3)를 참조하세요.

**Topics**
+ [Amazon S3 버킷 생성 및 구성](#create-s3-bucket-input)
+ [Amazon S3에 대한 멀티파트 업로드 구성](#Config_Multipart)
+ [모범 사례](#emr-bucket-bestpractices)
+ [Amazon S3 Express One Zone에 데이터 업로드](emr-express-one-zone.md)

## Amazon S3 버킷 생성 및 구성
<a name="create-s3-bucket-input"></a>

Amazon EMR은 Amazon S3와 AWS SDK for Java 함께를 사용하여 입력 데이터, 로그 파일 및 출력 데이터를 저장합니다. Amazon S3에서는 이러한 스토리지 위치를 *버킷*이라고 합니다. 버킷에는 Amazon S3 및 DNS 요구 사항을 준수하기 위한 특정 규제 및 제한이 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Bucket restrictions and limitations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)을 참조하세요.

이 섹션에서는 Amazon S3 AWS Management Console 를 사용하여 Amazon S3 버킷에 대한 권한을 생성하고 설정하는 방법을 보여줍니다. Amazon S3 API 또는 AWS CLI를 사용하여 Amazon S3 버킷에 대한 권한을 생성하고 설정할 수도 있습니다. 또한 수정 사항과 함께 curl을 사용하여 Amazon S3에 대한 적절한 인증 파라미터를 전달할 수 있습니다.

다음 리소스를 참조하세요.
+ 콘솔을 사용하여 버킷을 생성하려면 *Amazon S3 사용 설명서*에서 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)을 참조하세요.
+ 를 사용하여 버킷을 생성하고 작업하려면 Amazon [ S3 사용 설명서의에서 상위 수준 S3 명령 사용을 AWS Command Line Interface](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-s3-commands.html) AWS CLI참조하세요. *Amazon S3 *
+ SDK를 사용하여 버킷을 생성하려면 *Amazon Simple Storage Service 사용 설명서*에서 [버킷 생성 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-get-location-example.html)를 참조하세요.
+ Curl을 사용하여 버킷 작업을 하려면 [Curl용 Amazon S3 인증 도구](https://aws.amazon.com/code/amazon-s3-authentication-tool-for-curl/)를 참조하세요.
+ 리전별 버킷을 지정하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [버킷 액세스](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html#access-bucket-intro)를 참조하세요.
+ Amazon S3 액세스 포인트를 사용해 버킷을 작업하려면 *Amazon S3 사용 설명서*에서 [액세스 포인트에 버킷 스타일 별칭 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)을 참조하세요. Amazon S3 버킷 이름 대신 Amazon S3 액세스 포인트 별칭으로 Amazon S3 액세스 포인트를 쉽게 사용할 수 있습니다. Spark, Hive, Presto를 비롯한 기존 애플리케이션 및 새 애플리케이션 모두에서 Amazon S3 액세스 포인트 별칭을 사용할 수 있습니다.

**참고**  
버킷에 대한 로깅을 활성화할 경우 Amazon EMR 클러스터 로그가 아니라 버킷 액세스 로그만 활성화됩니다.

버킷 생성 도중에 또는 이후에 애플리케이션에 따라 버킷에 액세스하기 위한 적절한 권한을 설정할 수 있습니다. 일반적으로 자신(소유자)에게 읽기 및 쓰기 액세스 권한을 부여하고 인증된 사용자에게는 읽기 액세스 권한을 부여합니다.

클러스터를 생성하려면 먼저 필수 Amazon S3 버킷이 필요합니다. 클러스터에서 참조되는 모든 필수 스크립트 또는 데이터를 Amazon S3로 업로드해야 합니다.

## Amazon S3에 대한 멀티파트 업로드 구성
<a name="Config_Multipart"></a>

Amazon EMR은 AWS SDK for Java를 통한 Amazon S3 멀티파트 업로드를 지원합니다. 멀티파트 업로드를 사용하면 단일 객체를 여러 파트의 집합으로 업로드할 수 있습니다. 이러한 객체 부분은 독립적으로 그리고 임의의 순서로 업로드할 수 있습니다. 부분의 전송이 실패할 경우 다른 부분에 영향을 주지 않고도 해당 부분을 재전송할 수 있습니다. 객체의 모든 부분이 업로드되면 Amazon S3가 이 부분을 수집하여 객체를 생성합니다.

자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [멀티파트 업로드 개요](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)를 참조하세요.

또한 Amazon EMR은 실패한 멀티파트 업로드 파트의 정리를 더 정밀하게 제어할 수 있는 속성을 제공합니다.

다음 테이블에서는 멀티파트 업로드를 위한 Amazon EMR 구성 속성을 설명합니다. `core-site` 구성 분류를 사용하여 이 속성을 구성할 수 있습니다. 자세한 내용은 *Amazon EMR 릴리스 안내서*에서 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/configure-apps.html)을 참조하세요.


| 구성 파라미터 이름 | 기본값  | 설명 | 
| --- | --- | --- | 
| fs.s3n.multipart.uploads.enabled | true | 멀티파트 업로드를 활성화할지 여부를 나타내는 부울 유형입니다. EMRFS 일관된 보기가 활성화되면 멀티파트 업로드가 기본적으로 활성화되고 이 값을 false로 설정하는 것이 무시됩니다. | 
| fs.s3n.multipart.uploads.split.size | 134217728 | 멀티파트 업로드가 활성화되면 EMRFS에서 새 파트 업로드를 시작하기 전에 최대 파트 크기(바이트)를 지정합니다. 최소값은 `5242880`(5MB)입니다. 더 작은 값이 지정되면 `5242880`이 사용됩니다. 최대값은 `5368709120`(5GB)입니다. 더 큰 값이 지정되면 `5368709120`이 사용됩니다. EMRFS 클라이언트 측 암호화가 비활성화되고 Amazon S3 최적화된 커미터도 비활성화된 경우 이 값은 EMRFS에서 파일 업로드를 위해 `PutObject` 요청 대신 멀티파트 업로드를 사용할 때까지 데이터 파일이 도달할 수 있는 최대 크기도 제어합니다. 자세한 내용은 다음 섹션을 참조하세요. | 
| fs.s3n.ssl.enabled | true | http를 사용할지 또는 https를 사용할지를 나타내는 부울 유형입니다. | 
| fs.s3.buckets.create.enabled | false | 버킷이 없는 경우 버킷을 생성해야 하는지 여부를 나타내는 부울 유형입니다. false로 설정하면 CreateBucket 작업에서 예외가 발생합니다. | 
| fs.s3.multipart.clean.enabled | false | 불완전한 멀티파트 업로드의 주기적 백그라운드 정리를 활성화할지 여부를 나타내는 부울 유형입니다. | 
| fs.s3.multipart.clean.age.threshold | 604800 | 멀티파트 업로드를 정리하기 전까지의 최소 기간(초)을 지정하는 기간 유형입니다. 기본값은 1주일입니다. | 
| fs.s3.multipart.clean.jitter.max | 10000 | 다음 정리 작업을 예약하기 전 15분의 고정 지연에 추가된 무작위 지터 지연의 최대 기간(초)을 지정하는 정수 유형입니다. | 

### 멀티파트 업로드 비활성화
<a name="emr-dev-multipart-upload"></a>

------
#### [ Console ]

**콘솔에서 멀티파트 업로드를 비활성화하는 방법**

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

1. 왼쪽 탐색 창의 **EMR on EC2**에서 **클러스터**를 선택하고 **클러스터 생성**을 선택합니다.

1. **소프트웨어 설정**에 `classification=core-site,properties=[fs.s3n.multipart.uploads.enabled=false]` 구성을 입력합니다.

1. 클러스터에 적용할 다른 옵션을 선택합니다.

1. 클러스터를 시작하려면 **클러스터 생성**을 선택합니다.

------
#### [ CLI ]

**를 사용하여 멀티파트 업로드를 비활성화하려면 AWS CLI**

이 절차에서는 AWS CLI를 사용하여 멀티파트 업로드를 비활성화하는 방법을 설명합니다. 멀티파트 업로드를 비활성화하려면 `create-cluster` 명령을 `--bootstrap-actions` 파라미터와 함께 입력합니다.

1. 다음 내용이 포함된 `myConfig.json` 파일을 만들어 명령을 실행한 디렉터리와 동일한 디렉터리에 저장합니다.

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3n.multipart.uploads.enabled": "false"
       }
     }
   ]
   ```

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

   ```
   1. aws emr create-cluster --name "Test cluster" \
   2. --release-label emr-7.12.0 --applications Name=Hive Name=Pig \
   3. --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \
   4. --instance-count 3 --configurations file://myConfig.json
   ```

------
#### [ API ]

**API를 사용하여 멀티파트 업로드를 비활성화하는 방법**
+ Amazon S3 멀티파트 업로드를 프로그래밍 방식으로 사용하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [멀티파트 업로드에 AWS SDK for Java 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMPDotJavaAPI.html)을 참조하세요.

   AWS SDK for Java에 대한 자세한 내용은 [AWS SDK for Java](https://aws.amazon.com/sdkforjava/)를 참조하세요.

------

## 모범 사례
<a name="emr-bucket-bestpractices"></a>

다음은 Amazon S3 버킷을 EMR 클러스터와 함께 사용하기 위한 권장 사항입니다.

### 버전 관리 사용
<a name="emr-enable-versioning"></a>

버전 관리는 Amazon S3 버킷에 대한 권장 구성입니다. 버전 관리를 활성화하면 데이터를 실수로 삭제하거나 덮어 쓰는 경우에도 데이터를 복구할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 [버전 관리 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)을 참조하세요.

### 실패한 멀티파트 업로드 정리
<a name="emr-multipart-cleanup"></a>

EMR 클러스터 구성 요소는 AWS SDK for Java를 통해 Amazon S3 APIs를 사용하여 기본적으로 Amazon S3에 로그 파일 및 출력 데이터를 씁니다. Amazon EMR을 사용하여 이 구성과 관련된 속성을 변경하는 방법에 대한 자세한 내용은 [Amazon S3에 대한 멀티파트 업로드 구성](#Config_Multipart) 섹션을 참조하세요. 대규모 파일을 업로드할 경우 가끔 불완전 Amazon S3 멀티파트 업로드가 될 수 있습니다. 멀티파트 업로드를 성공적으로 완료할 수 없는 경우 진행 중인 멀티파트 업로드가 버킷을 계속 점유하며 스토리지 요금이 발생합니다. 파일 스토리지가 과도하게 사용되는 것을 방지하려면 다음 옵션을 사용하는 것이 좋습니다.
+ Amazon EMR과 함께 사용하는 버킷에 대해 업로드 시작 날짜로부터 3일 후에 불완전 멀티파트 업로드를 제거하는 Amazon S3의 수명 주기 구성 규칙을 사용합니다. 수명 주기 구성 규칙을 사용하면 객체의 스토리지 클래스와 수명을 제어할 수 있습니다. 자세한 내용은 [객체 수명 주기 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) 및 [버킷 수명 주기 정책을 사용하여 불완전 멀티파트 업로드 중단](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)을 참조하세요.
+ `fs.s3.multipart.clean.enabled`를 `true`로 설정하고 다른 정리 파라미터를 튜닝하여 Amazon EMR의 멀티파트 정리 기능을 활성화합니다. 이 기능은 대량, 대규모 및 제한된 가동 시간의 클러스터에 유용합니다. 이 경우 수명 주기 구성 규칙의 `DaysAfterIntitiation` 파라미터는 최솟값으로 설정된 경우에도 너무 길어질 수 있어 Amazon S3 스토리지에 급증 문제가 발생할 수 있습니다. Amazon EMR의 멀티파트 정리를 통해 보다 정밀한 제어가 가능합니다. 자세한 내용은 [Amazon S3에 대한 멀티파트 업로드 구성](#Config_Multipart) 단원을 참조하십시오.

### 버전 마커 관리
<a name="w2aac28c11c17c11b7c11b9"></a>

Amazon EMR와 함께 사용할 버전이 지정된 버킷에 대해 만료된 객체 삭제 마커를 제거하는 Amazon S3의 수명 주기 구성 규칙을 활성화하는 것이 좋습니다. 버전이 지정된 버킷에서 객체를 삭제하면 삭제 마커가 생성됩니다. 객체의 이전 버전이 모두 순차적으로 만료되면 만료된 객체 삭제 마커가 버킷에 남겨집니다. 삭제 마커에 대한 요금은 부과되지 않지만, 만료된 마커를 제거하면 LIST 요청의 성능이 향상될 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 [버전 관리를 포함하는 버킷의 수명 주기 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)을 참조하세요.

### 성능 모범 사례
<a name="w2aac28c11c17c11b7c11c11"></a>

워크로드에 따라 특정한 유형으로 EMR 클러스터와 해당 클러스터의 애플리케이션을 사용할 경우 버킷에 대해 많은 수의 요청이 발생할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [요청 속도 및 성능 고려 사항](https://docs.aws.amazon.com/AmazonS3/latest/userguide/request-rate-perf-considerations.html)을 참조하세요.

# Amazon S3 Express One Zone에 데이터 업로드
<a name="emr-express-one-zone"></a>

## 개요
<a name="emr-express-one-zone-overview"></a>

Amazon EMR 6.15.0 이상에서는 Apache Spark가 있는 Amazon EMR을 [Amazon S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html) 스토리지 클래스와 함께 사용하여 Spark 작업의 성능을 향상시킬 수 있습니다. Amazon EMR 릴리스 7.2.0 이상은 HBase, Flink 및 Hive도 지원하므로 이러한 애플리케이션을 사용하는 경우에도 S3 Express One Zone의 이점을 누릴 수 있습니다. S3 Express One Zone은 초당 수십만 개의 요청을 통해 데이터에 빈번하게 액세스하는 애플리케이션을 위한 S3 스토리지 클래스입니다.** 릴리스 시점에 S3 Express One Zone은 Amazon S3에서 지연 시간이 가장 낮고 성능은 가장 뛰어난 클라우드 객체 스토리지를 제공합니다.

## 사전 조건
<a name="emr-express-one-zone-prereqs"></a>
+ **S3 Express One Zone 권한** - S3 Express One Zone이 S3 객체에 대해 `GET`, `LIST` 또는 `PUT`과 같은 작업을 최초로 수행하면 스토리지 클래스가 사용자를 대신하여 `CreateSession`을 호출합니다. S3A 커넥터가 `CreateSession` API를 간접적으로 호출할 수 있으려면 IAM 정책에서 `s3express:CreateSession` 권한을 허용해야 합니다. 이 권한이 있는 정책 예시는 [Amazon S3 Express One Zone 시작하기](#emr-express-one-zone-start) 섹션을 참조하세요.
+ **S3A 커넥터** - Spark 클러스터를 S3 Express One Zone 스토리지 클래스를 사용하는 Amazon S3 버킷의 데이터에 액세스하도록 구성하려면 Apache Hadoop 커넥터 S3A를 사용해야 합니다. 커넥터를 사용하려면 모든 S3 URI가 `s3a` 체계를 사용하는지 확인해야 합니다. 그렇지 않은 경우 `s3` 및 `s3n` 체계에 대해 사용하는 파일 시스템 구현을 변경할 수 있습니다.

`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"
    }
  }
]
```

## Amazon S3 Express One Zone 시작하기
<a name="emr-express-one-zone-start"></a>

**Topics**
+ [권한 정책 생성](#emr-express-one-zone-permissions)
+ [클러스터 생성 및 구성](#emr-express-one-zone-create)
+ [구성 개요](#emr-express-one-zone-configs)

### 권한 정책 생성
<a name="emr-express-one-zone-permissions"></a>

Amazon S3 Express One Zone을 사용하는 클러스터를 생성하기 전에 클러스터의 Amazon EC2 인스턴스 프로파일에 연결할 IAM 정책을 생성해야 합니다. 정책에는 S3 Express One Zone 스토리지 클래스에 액세스할 수 있는 권한이 있어야 합니다. 다음 정책 예제에서는 필요한 권한을 부여하는 방법을 보여줍니다. 정책을 생성한 후에는 [클러스터 생성 및 구성](#emr-express-one-zone-create) 섹션의 내용대로 정책을 EMR 클러스터를 생성하는 데 사용하는 인스턴스 프로파일 역할에 연결할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3express:*:123456789012:bucket/example-s3-bucket"
      ],
      "Action": [
        "s3express:CreateSession"
      ],
      "Sid": "AllowS3EXPRESSCreatesession"
    }
  ]
}
```

------

### 클러스터 생성 및 구성
<a name="emr-express-one-zone-create"></a>

다음으로 S3 Express One Zone을 사용하여 Spark, HBase, Flink 또는 Hive를 실행하는 클러스터를 생성합니다. 다음 단계에서는 AWS Management Console에서 클러스터를 생성하는 방법을 개략적으로 설명합니다.

1. Amazon EMR 콘솔로 이동하고 사이드바에서 **클러스터**를 선택합니다. 그 다음에 **클러스터 생성**을 선택합니다.

1. Spark를 사용하는 경우 Amazon EMR 릴리스 `emr-6.15.0` 이상을 선택합니다. HBase, Flink 또는 Hive를 사용하는 경우 `emr-7.2.0` 이상을 선택합니다.

1. Spark, HBase 또는 Flink와 같이 클러스터에 포함할 애플리케이션을 선택합니다.

1. Amazon S3 Express One Zone을 활성화하기 위해 **소프트웨어 설정** 섹션에 다음 예시와 비슷한 구성을 입력합니다. 구성 및 권장되는 값은 이 절차 다음에 이어지는 [구성 개요](#emr-express-one-zone-configs) 섹션에서 확인할 수 있습니다.

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3a.aws.credentials.provider": "software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider",
         "fs.s3a.change.detection.mode": "none",
         "fs.s3a.endpoint.region": "aa-example-1",
         "fs.s3a.select.enabled": "false"
       }
     },
     {
       "Classification": "spark-defaults",
       "Properties": {
         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
       }
     }
   ]
   ```

1. **Amazon EMR용 EC2 인스턴스 프로파일** 섹션에서 기존 역할을 사용하도록 선택하고 위의 [권한 정책 생성](#emr-express-one-zone-permissions) 섹션에서 생성한 정책이 첨부된 역할을 사용합니다.

1. 나머지 클러스터 설정을 애플리케이션에 맞게 구성한 다음 **클러스터 생성**을 선택합니다.

### 구성 개요
<a name="emr-express-one-zone-configs"></a>

다음 표에는 [클러스터 생성 및 구성](#emr-express-one-zone-create) 섹션의 내용처럼 Amazon EMR과 함께 S3 Express One Zone을 사용하는 클러스터를 설정하는 경우 지정해야 하는 구성 및 권장되는 값이 설명되어 있습니다.

**S3A 구성**


| 파라미터 | 기본값  | 제안된 값 | 설명 | 
| --- | --- | --- | --- | 
|  `fs.s3a.aws.credentials.provider`  |  지정되지 않은 경우에는 `AWSCredentialProviderList`를 `TemporaryAWSCredentialsProvider`, `SimpleAWSCredentialsProvider`, `EnvironmentVariableCredentialsProvider`, `IAMInstanceCredentialsProvider`의 순서로 사용합니다.  |  <pre>software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider</pre>  |  Amazon EMR 인스턴스 프로파일 역할에는 S3A 파일 시스템이 `s3express:CreateSession`을 직접적으로 호출하도록 허용하는 정책이 있어야 합니다. 다른 보안 인증 정보 공급자도 S3 Express One Zone 권한이 있는 경우 작동할 수 있습니다.  | 
|  `fs.s3a.endpoint.region`  |  null  |  버킷을 생성한 AWS 리전 입니다.  |  리전 확인 로직은 S3 Express One Zone 스토리지 클래스에서는 작동하지 않습니다.  | 
|  `fs.s3a.select.enabled`  |  `true`  |  `false`  |  Amazon S3 `select`는 S3 Express One Zone 스토리지 클래스에서 지원되지 않습니다.  | 
|  `fs.s3a.change.detection.mode`  |  `server`  |  없음  |  MD5 기반의 `etags`을 확인하여 S3A 작업에서의 감지를 변경합니다. S3 Express One Zone 스토리지 클래스는 MD5 `checksums`을 지원하지 않습니다.  | 

**Spark 구성**


| 파라미터 | 기본값  | 제안된 값 | 설명 | 
| --- | --- | --- | --- | 
|  `spark.sql.sources.fastS3PartitionDiscovery.enabled`  |  `true`  |  false  |  내부 최적화는 S3 Express One Zone 스토리지 클래스에서 지원되지 않는 S3 API 파라미터를 사용합니다.  | 

**Hive 구성**


| 파라미터 | 기본값  | 제안된 값 | 설명 | 
| --- | --- | --- | --- | 
|  `hive.exec.fast.s3.partition.discovery.enabled`  |  `true`  |  false  |  내부 최적화는 S3 Express One Zone 스토리지 클래스에서 지원되지 않는 S3 API 파라미터를 사용합니다.  | 

## 고려 사항
<a name="emr-express-one-zone-considerations"></a>

Amazon EMR의 Apache Spark를 S3 Express One Zone 스토리지 클래스와 통합하는 경우에는 다음 사항을 고려하세요.
+ S3 Express One Zone을 Amazon EMR과 함께 사용하기 위해서는 S3A 커넥터가 있어야 합니다. S3 Express One Zone과 상호 작용하는 데 필요한 기능과 스토리지 클래스는 S3A에만 있습니다. 커넥터를 설정하는 단계는 [사전 조건](#emr-express-one-zone-prereqs) 섹션을 참조하세요.
+ S3 Express One Zone 스토리지 클래스는 SSE-S3 및 SSE-KMS 암호화만 지원합니다. 자세한 내용은 [Amazon S3를 사용한 서버 측 암호화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-data-protection.html#s3-express-ecnryption)를 참조하세요.
+ Amazon S3 Express One Zone 스토리지 클래스는 S3A `FileOutputCommitter`를 사용한 쓰기를 지원하지 않습니다. S3 Express One Zone 버킷에서 S3A `FileOutputCommitter`를 사용하여 쓸 경우 *InvalidStorageClass: The storage class you specified is not valid* 오류가 발생합니다.
+ Amazon S3 Express One Zone은 EMR on EC2의 Amazon EMR 릴리스 6.15.0 이상에서 지원됩니다. 또한 Amazon EMR on EKS 및 Amazon EMR Serverless의 Amazon EMR 릴리스 7.2.0 이상에서 지원됩니다.

# 를 사용하여 데이터 업로드 AWS DataSync
<a name="emr-plan-upload-datasync"></a>

AWS DataSync 는 온프레미스 스토리지와 스토리지 서비스 간에 또는 AWS 스토리지 서비스 간에 데이터를 이동하는 프로세스를 간소화, 자동화 및 가속화하는 온라인 데이터 전송 AWS 서비스입니다. DataSync는 Hadoop 분산 파일 시스템(HDFS), NAS 파일 서버, 자체 관리형 객체 스토리지와 같은 다양한 온프레미스 스토리지 시스템을 지원합니다.

클러스터로 데이터를 가져가는 가장 일반적인 방법은 데이터를 Amazon S3에 업로드하고 Amazon EMR의 기본 제공 기능을 사용하여 데이터를 클러스터에 로드하는 것입니다.

DataSync는 다음 작업을 수행하는 데 도움이 될 수 있습니다.
+ 비즈니스 연속성을 위해 Hadoop 클러스터의 HDFS를 Amazon S3로 복제
+ HDFS를 Amazon S3에 복사하여 데이터 레이크 채우기
+ 분석 및 처리를 위해 Hadoop 클러스터의 HDFS와 Amazon S3 사이에서 데이터 전송

S3 버킷에 데이터를 업로드하려면 먼저 온프레미스 스토리지와 동일한 네트워크에 하나 이상의 DataSync 에이전트를 배포해야 합니다. *에이전트*란, 자체 관리형 위치에서 데이터를 읽거나 쓰는 데 사용되는 가상 머신(VM)입니다. 그런 다음 S3 버킷이 AWS 리전 위치한 AWS 계정 및에서 에이전트를 활성화합니다.

에이전트가 활성화되면 온프레미스 스토리지의 소스 위치, S3 버킷의 대상 위치 및 작업을 생성합니다. *작업*이란 두 위치(소스 및 대상)의 집합이자 작업의 동작을 제어하는 데 사용하는 기본 옵션의 집합입니다.

마지막으로 DataSync 작업을 실행하여 소스에서 대상으로 데이터를 전송합니다.

자세한 내용은 [AWS DataSync시작하기](https://docs.aws.amazon.com/datasync/latest/userguide/getting-started.html)를 참조하세요.

# Amazon EMR에서 분산 캐시를 사용하여 파일 가져오기
<a name="emr-plan-input-distributed-cache"></a>

DistributedCache는 map 또는 reduce 작업이 일반적인 데이터에 액세스해야 할 때 효율성을 높일 수 있는 Hadoop 기능입니다. 클러스터가 생성될 때 설치되지 않은 기존 애플리케이션이나 바이너리를 이용하는 경우 DistributedCache를 사용하여 이러한 파일을 가져올 수 있습니다. 이 기능을 사용하면 클러스터 노드가 다른 클러스터 노드에서 파일을 가져오는 대신 로컬 파일 시스템에서 가져온 파일을 읽을 수 있습니다.

자세한 내용은 [http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html](http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html)을 참조하세요.

클러스터를 생성할 때 DistributedCache를 간접적으로 호출할 수 있습니다. 파일은 Hadoop 작업을 시작하기 직전에 캐시되며 파일은 작업이 지속되는 동안 캐시된 상태로 유지됩니다. 모든 Hadoop 호환 파일 시스템(예: HDFS 또는 Amazon S3)에 저장된 파일을 캐시할 수 있습니다. 파일 캐시의 기본 크기는 10GB입니다. 캐시 크기를 변경하려면 부트스트랩 작업을 사용하여 Hadoop 파라미터 `local.cache.size`를 다시 구성합니다. 자세한 내용은 [부트스트랩 작업을 생성하여 Amazon EMR 클러스터에서 추가 소프트웨어 설치](emr-plan-bootstrap.md) 단원을 참조하십시오.

**Topics**
+ [지원되는 파일 형식](#emr-dev-supported-file-types)
+ [캐시된 파일의 위치](#locationofcache)
+ [스트리밍 애플리케이션에서 캐시된 파일에 액세스](#cachemapper)
+ [스트리밍 애플리케이션에서 캐시된 파일에 액세스](#cacheinconsole)

## 지원되는 파일 형식
<a name="emr-dev-supported-file-types"></a>

DistributedCache는 단일 파일과 아카이브를 모두 허용합니다. 개별 파일은 읽기 전용으로 캐시됩니다. 실행 파일과 바이너리 파일에는 실행 권한이 설정되어 있습니다.

아카이브는 `gzip`과 같은 유틸리티를 사용하여 패키징된 하나 이상의 파일입니다. DistributedCache에서는 압축된 파일을 각 코어 노드에 전달하고 캐싱의 일부로 아카이브의 압축을 풉니다. DistributedCache에서는 다음과 같은 압축 형식이 지원됩니다.
+ zip
+ tgz
+ tar.gz
+ tar
+ jar

## 캐시된 파일의 위치
<a name="locationofcache"></a>

DistributedCache에서는 파일을 코어 노드로만 복사합니다. 클러스터에 코어 노드가 없는 경우 DistributedCache는 파일을 프라이머리 노드에 복사합니다.

DistributedCache는 symlinks를 사용하여 캐시 파일을 매퍼 및 reducer의 현재 작업 중인 디렉터리에 연결합니다. symlink는 실제 파일 위치가 아니라 파일 위치의 별칭입니다. 파라미터 값(`yarn-site.xml`의 `yarn.nodemanager.local-dirs`)은 임시 파일의 위치를 지정합니다. Amazon EMR은 이 파라미터를 `/mnt/mapred`로 설정하거나 인스턴스 유형 및 EMR 버전에 따라 약간 다르게 설정합니다. 예를 들어, 인스턴스 유형에는 두 개의 휘발성 볼륨이 있으므로 설정에 `/mnt/mapred` 및 `/mnt1/mapred`가 있을 수 있습니다. 캐시 파일은 `/mnt/mapred/taskTracker/archive`에 있는 임시 파일 위치인 하위 디렉터리에 있습니다.

단일 파일을 캐시하면 DistributedCache는 파일을 `archive` 디렉터리에 넣습니다. 아카이브를 캐시하면 DistributedCache에서는 파일을 압축 해제하고 `/archive`에 아카이브 파일 이름과 동일한 이름으로 하위 디렉터리를 생성합니다. 개별 파일은 새 하위 디렉터리에 있습니다.

스트리밍을 사용할 때만 DistributedCache를 사용할 수 있습니다.

## 스트리밍 애플리케이션에서 캐시된 파일에 액세스
<a name="cachemapper"></a>

매퍼 또는 reducer 애플리케이션에서 캐시된 파일에 액세스하려면 현재 작업 디렉터리(./)를 애플리케이션 경로에 추가했으며 캐시 파일이 현재 작업 디렉터리에 있는 것처럼 캐시 파일을 참조했는지 확인합니다.

## 스트리밍 애플리케이션에서 캐시된 파일에 액세스
<a name="cacheinconsole"></a>

 AWS Management Console 및를 사용하여 분산 캐시 AWS CLI 를 사용하는 클러스터를 생성할 수 있습니다.

------
#### [ Console ]

**새 콘솔을 사용하여 분산 캐시 파일을 지정하는 방법**

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

1. 왼쪽 탐색 창의 **EMR on EC2**에서 **클러스터**를 선택하고 **클러스터 생성**을 선택합니다.

1. **단계**에서 **단계 추가**를 선택합니다. 그러면 **단계 추가** 대화 상자가 열립니다. **인수** 필드에서 캐시에 저장할 파일과 아카이브를 포함합니다. 파일의 크기(또는 아카이브 파일의 총 파일 크기)는 할당된 캐시 크기보다 작아야 합니다.

   분산 캐시에 개별 파일을 추가하려는 경우 `-cacheFile` 다음에 파일의 이름 및 위치, 파운드(\$1) 기호, 그리고 파일에 제공할 이름(파일이 로컬 캐시에 배치되는 경우)을 차례로 지정합니다. 다음 예제에서는 분산 캐시에 개별 파일을 추가하는 방법을 보여줍니다.

   ```
   -cacheFile \
   s3://amzn-s3-demo-bucket/file-name#cache-file-name
   ```

   분산 캐시에 아카이브 파일을 추가하려는 경우 `-cacheArchive` 다음에 Amazon S3 내 파일의 위치, 파운드(\$1) 기호 및 로컬 캐시에서 파일 모음에 제공할 이름을 차례로 입력합니다. 다음 예제에서는 분산 캐시에 아카이브 파일을 추가하는 방법을 보여줍니다.

   ```
   -cacheArchive \
   s3://amzn-s3-demo-bucket/archive-name#cache-archive-name
   ```

   다른 대화 상자 필드에 적절한 값을 입력합니다. 옵션은 단계 유형에 따라 다릅니다. 단계를 추가하고 대화 상자를 종료하려면 **단계 추가**를 선택합니다.

1. 클러스터에 적용할 다른 옵션을 선택합니다.

1. 클러스터를 시작하려면 **클러스터 생성**을 선택합니다.

------
#### [ CLI ]

**를 사용하여 분산 캐시 파일을 지정하려면 AWS CLI**
+ 클러스터가 생성될 때 스트리밍 단계를 제출하려면 `create-cluster` 명령을 `--steps` 파라미터와 함께 입력합니다. 를 사용하여 분산 캐시 파일을 지정하려면 스트리밍 단계를 제출할 때 적절한 인수를 AWS CLI지정합니다.

  분산 캐시에 개별 파일을 추가하려는 경우 `-cacheFile` 다음에 파일의 이름 및 위치, 파운드(\$1) 기호, 그리고 파일에 제공할 이름(파일이 로컬 캐시에 배치되는 경우)을 차례로 지정합니다.

  분산 캐시에 아카이브 파일을 추가하려는 경우 `-cacheArchive` 다음에 Amazon S3 내 파일의 위치, 파운드(\$1) 기호 및 로컬 캐시에서 파일 모음에 제공할 이름을 차례로 입력합니다. 다음 예제에서는 분산 캐시에 아카이브 파일을 추가하는 방법을 보여줍니다.

  에서 Amazon EMR 명령을 사용하는 방법에 대한 자세한 내용은 섹션을 AWS CLI참조하세요[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr).

**Example 1**  
다음 명령을 입력하여 클러스터를 시작하고 `-cacheFile`를 사용하여 `sample_dataset_cached.dat` 파일을 캐시에 추가하는 스트리밍 단계를 제출합니다.  

```
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]
```
`--instance-groups` 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.  
EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 `aws emr create-default-roles` 하위 명령을 입력하기 전에 `create-cluster`를 입력하여 생성합니다.

**Example 2**  
다음 명령은 스트리밍 클러스터의 생성 방법을 보여 주며 `-cacheArchive`를 사용하여 파일 아카이브를 캐시에 추가합니다.  

```
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]
```
`--instance-groups` 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.  
EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 `aws emr create-default-roles` 하위 명령을 입력하기 전에 `create-cluster`를 입력하여 생성합니다.

------

# Amazon EMR을 사용하여 압축 파일 탐지 및 처리
<a name="HowtoProcessGzippedFiles"></a>

Hadoop은 파일 확장명을 확인하여 압축 파일을 감지합니다. Hadoop에서 지원되는 압축 형식은 gzip, bzip2 및 LZO입니다. 이러한 압축 형식을 사용하는 파일을 압축 해제하기 위해 추가 작업을 수행할 필요는 없으며 Hadoop에서 자동으로 처리됩니다.

LZO 파일을 인덱스하려면 [https://github.com/kevinweil/hadoop-lzo](https://github.com/kevinweil/hadoop-lzo)에서 다운로드할 수 있는 hadoop-lzo 라이브러리를 사용할 수 있습니다. 이 라이브러리는 타사 라이브러리이므로 Amazon EMR은 이 도구를 사용하는 방법에 대한 개발자 지원을 제공하지 않습니다. 사용 방법에 대한 자세한 내용은 [hadoop-lzo readme 파일](https://github.com/kevinweil/hadoop-lzo/blob/master/README.md)을 참조하세요.

# Amazon EMR을 사용하여 DynamoDB 데이터를 Hive로 가져오기
<a name="emr-plan-input-dynamodb"></a>

Amazon EMR에서 제공하는 Hive 구현에는 DynamoDB와 Amazon EMR 클러스터 간에 데이터를 가져오고 내보내기 위해 사용할 수 있는 기능이 포함됩니다. 이 기능은 입력 데이터가 DynamoDB에 저장된 경우에 유용합니다. 자세한 내용은 [Amazon EMR을 사용하여 DynamoDB에서 테이블 내보내기, 가져오기, 쿼리 및 조인](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMRforDynamoDB.html)을 참조하세요.

# Amazon EMR AWS Direct Connect 에서를 사용하여 데이터에 연결
<a name="emr-plan-input-directconnect"></a>

Direct Connect 는 데이터 센터, 사무실 또는 콜로케이션 환경에서 Amazon Web Services에 대한 프라이빗 전용 네트워크 연결을 설정하는 데 사용할 수 있는 서비스입니다. 입력 데이터가 많은 경우를 사용하면 네트워크 비용을 절감하고 대역폭 처리량을 늘리며 인터넷 기반 연결보다 더 일관된 네트워크 환경을 제공할 Direct Connect 수 있습니다. 자세한 내용은 [Direct Connect 사용 설명서](https://docs.aws.amazon.com/directconnect/latest/UserGuide/)를 참조하세요.

# 를 사용하여 Amazon EMR에 대량의 데이터 업로드 AWS Snowball Edge
<a name="emr-plan-input-snowball"></a>

AWS Snowball Edge 는 faster-than-internet 속도로 Amazon Simple Storage Service(Amazon S3)와 현장 데이터 스토리지 위치 간에 대량의 데이터를 전송하는 데 사용할 수 있는 서비스입니다. Snowball Edge는 가져오기 작업과 내보내기 작업과 같은 두 가지 작업 유형을 지원합니다. 가져오기 작업에는 온프레미스 소스에서 Amazon S3 버킷으로 데이터를 전송하는 작업이 포함됩니다. 내보내기 작업에는 Amazon S3 버킷에서 온프레미스 소스로의 데이터 전송이 포함됩니다. 두 작업 유형 모두에서 현지 배송업체가 Amazon S3 및 현장 데이터 스토리지 위치 사이에서 Snowball 디바이스를 운송하는 동안 Snowball 디바이스는 데이터를 보호하고 보안합니다. Snowball Edge 디바이스는 물리적으로 견고하며 AWS Key Management Service ()로 보호됩니다AWS KMS. 자세한 내용은 [AWS Snowball Edge Edge 개발자 안내서](https://docs.aws.amazon.com/snowball/latest/developer-guide/)를 참조하세요.

# Amazon EMR 클러스터 출력 위치 구성
<a name="emr-plan-output"></a>

 Amazon EMR 클러스터의 가장 일반적인 출력 형식은 압축 또는 압축 해제된 텍스트 파일입니다. 일반적으로 이 파일은 Amazon S3 버킷에 기록됩니다. 클러스터를 시작하기 전에 이 버킷을 만들어야 합니다. 클러스터를 시작할 때 S3 버킷을 출력 위치로 지정합니다.

자세한 내용은 다음 항목을 참조하세요.

**Topics**
+ [Amazon S3 버킷 생성 및 구성](#create-s3-bucket-output)
+ [Amazon EMR은 어떤 형식을 반환할 수 있나요?](emr-plan-output-formats.md)
+ [Amazon EMR을 사용하여 소유하지 않는 Amazon S3 버킷에 데이터를 쓰는 방법](emr-s3-acls.md)
+ [Amazon EMR 클러스터의 출력을 압축하는 방법](emr-plan-output-compression.md)

## Amazon S3 버킷 생성 및 구성
<a name="create-s3-bucket-output"></a>

Amazon EMR은 Amazon S3를 사용하여 입력 데이터, 로그 파일 및 출력 데이터를 저장합니다. Amazon S3에서는 이러한 스토리지 위치를 *버킷*이라고 합니다. 버킷에는 Amazon S3 및 DNS 요구 사항을 준수하기 위한 특정 규제 및 제한이 있습니다. 자세한 내용은 *Amazon Simple Storage Service 개발자 안내서*DPTJ [버킷 규제 및 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)을 참조하세요.

Amazon S3 버킷을 생성하려면 *Amazon Simple Storage Service 사용 설명서*에서 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 지침을 따릅니다.

**참고**  
 **Create a Bucket(버킷 생성)** 마법사에서 로깅을 활성화할 경우 클러스터 로그가 아니라 버킷 액세스 로그만 활성화됩니다.

**참고**  
리전별 버킷 지정에 대한 자세한 내용은 *Amazon Simple Storage Service 개발자 안내서*의 [버킷 및 리전](https://docs.aws.amazon.com/AmazonS3/latest/dev/LocationSelection.html)과 [AWS SDKs에 사용 가능한 리전 엔드포인트를 참조하세요](https://aws.amazon.com/articles/available-region-endpoints-for-the-aws-sdks/).

 버킷을 생성한 후에는 해당 버킷에 적합한 권한을 설정할 수 있습니다. 일반적으로 자신(소유자)에게 읽기 및 쓰기 액세스 권한을 부여합니다. 버킷을 구성할 때는 [Amazon S3의 보안 모범 사례](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)를 따르는 것이 좋습니다.

 클러스터를 생성하려면 먼저 필수 Amazon S3 버킷이 필요합니다. 클러스터에서 참조되는 모든 필수 스크립트 또는 데이터를 Amazon S3로 업로드해야 합니다. 다음 표에서는 예제 데이터, 스크립트 및 로그 파일 위치에 대해 설명합니다.


| 정보 | Amazon S3에서 위치 예제 | 
| --- | --- | 
| 스크립트 또는 프로그램 |  s3://amzn-s3-demo-bucket1/script/MapperScript.py  | 
| 로그 파일 |  s3://amzn-s3-demo-bucket1/logs  | 
| 입력 데이터 |  s3://amzn-s3-demo-bucket1/input  | 
| 출력 데이터 |  s3://amzn-s3-demo-bucket1/output  | 

# Amazon EMR은 어떤 형식을 반환할 수 있나요?
<a name="emr-plan-output-formats"></a>

 클러스터의 기본 출력 형식은 키 값 쌍이 텍스트 파일의 개별 행에 쓰여진 텍스트입니다. 이 형식은 가장 일반적으로 사용되는 출력 형식입니다.

 출력 데이터가 기본 텍스트 파일 이외의 다른 형식으로 작성되어야 하는 경우 Hadoop 인터페이스 `OutputFormat`을 사용하여 다른 출력 형식을 지정할 수 있습니다. 사용자 지정 데이터 유형을 처리하기 위해 `FileOutputFormat` 클래스의 하위 클래스를 만들 수도 있습니다. 자세한 내용은 [http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/OutputFormat.html](http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/OutputFormat.html) 섹션을 참조하세요.

 Hive 클러스터를 실행 중인 경우 serializer/deserializer(SerDe)를 사용하여 HDFS에서 지정된 형식으로 데이터를 출력할 수 있습니다. 자세한 내용은 [https://cwiki.apache.org/confluence/display/Hive/SerDe](https://cwiki.apache.org/confluence/display/Hive/SerDe)를 참조하세요.

# Amazon EMR을 사용하여 소유하지 않는 Amazon S3 버킷에 데이터를 쓰는 방법
<a name="emr-s3-acls"></a>

 파일을 Amazon Simple Storage Service(S3)에 쓰는 경우 해당 사용자가 기본적으로 해당 파일을 읽을 수 있는 유일한 사람입니다. 이 기본 설정은 해당 사용자가 파일을 자신의 고유 버킷에 쓴다고 가정하여 파일의 개인 정보를 보호합니다.

 그러나 클러스터를 실행 중이고 출력을 다른 AWS 사용자의 Amazon S3 버킷에 쓰고 다른 AWS 사용자가 해당 출력을 읽을 수 있도록 하려면 다음 두 가지 작업을 수행해야 합니다.
+  다른 AWS 사용자에게 Amazon S3 버킷에 대한 쓰기 권한을 부여하도록 합니다. 시작하는 클러스터는 자격 AWS 증명으로 실행되므로 시작하는 모든 클러스터도 다른 AWS 사용자의 버킷에 쓸 수 있습니다.
+  사용자 또는 클러스터가 Amazon S3 버킷에 쓰는 파일에 대해 다른 AWS 사용자의 읽기 권한을 설정합니다. 이러한 읽기 권한을 설정하는 가장 쉬운 방법은 Amazon S3에서 정의한 사전 정의된 액세스 정책 세트인 미리 준비된 액세스 제어 목록(ACL)을 사용하는 것입니다.

 다른 AWS 사용자가 다른 사용자의 Amazon S3 버킷에 파일을 쓸 수 있는 권한을 부여하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 권한 편집](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EditingBucketPermissions.html)을 참조하세요.

 파일을 Amazon S3에 쓸 때 클러스터에서 미리 준비된 ACL을 사용하도록 하려면 `fs.s3.canned.acl` 클러스터 구성 옵션을 사용하고자 하는 미리 준비된 ACL로 설정합니다. 다음 표에는 현재 정의되어 있는 미리 준비된 ACL이 나열됩니다.


| 미리 제공된 ACL | 설명 | 
| --- | --- | 
| AuthenticatedRead | 소유자에게 Permission.FullControl이 부여되고 GroupGrantee.AuthenticatedUsers 그룹 피부여자에게 Permission.Read 액세스가 부여되도록 지정합니다. | 
| BucketOwnerFullControl | 버킷의 소유자에게 Permission.FullControl이 부여되도록 지정합니다. 버킷의 소유자가 반드시 객체의 소유자와 동일할 필요는 없습니다. | 
| BucketOwnerRead | 버킷의 소유자에게 Permission.Read이 부여되도록 지정합니다. 버킷의 소유자가 반드시 객체의 소유자와 동일할 필요는 없습니다. | 
| LogDeliveryWrite | 소유자에게 Permission.FullControl이 부여되고 GroupGrantee.LogDelivery 그룹 피부여자에게 Permission.Write 액세스가 부여되도록 지정합니다. 따라서 액세스 로그를 제공할 수 있습니다. | 
| Private | 소유자에게 Permission.FullControl이 부여되도록 지정합니다. | 
| PublicRead | 소유자에게 Permission.FullControl이 부여되고 GroupGrantee.AllUsers 그룹 피부여자에게 Permission.Read 액세스가 부여되도록 지정합니다. | 
| PublicReadWrite | 소유자에게 Permission.FullControl이 부여되고 GroupGrantee.AllUsers 그룹 피부여자에게 Permission.Read 및 Permission.Write 액세스가 부여되도록 지정합니다. | 

 실행 중인 클러스터 유형에 따라 클러스터 구성 옵션을 설정하는 방법에는 여러 가지가 있습니다. 다음 절차에서는 일반적인 경우에 적합한 옵션 설정 방법을 보여 줍니다.

**Hive에서 미리 준비된 ACL을 사용하여 파일을 쓰려면**
+  Hive 명령 프롬프트에서 `fs.s3.canned.acl` 구성 옵션을 클러스터에서 Amazon S3에 쓰는 파일에 대해 설정할 미리 준비된 ACL로 설정합니다. Hive 명령 프롬프트에 액세스하려면 SSH를 사용하여 마스터 노드에 연결하고 Hadoop 명령 프롬프트에서 Hive를 입력합니다. 자세한 내용은 [SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결](emr-connect-master-node-ssh.md) 단원을 참조하십시오.

   다음 예제에서는 `fs.s3.canned.acl` 구성 옵션을 `BucketOwnerFullControl`로 설정하여 Amazon S3 버킷 소유자에게 파일을 완벽하게 제어할 수 있는 권한을 부여합니다. set 명령은 대/소문자를 구분하며 물음표나 공백을 포함하지 않습니다.

  ```
  hive> set fs.s3.canned.acl=BucketOwnerFullControl;   
  create table acl (n int) location 's3://amzn-s3-demo-bucket/acl/'; 
  insert overwrite table acl select count(*) from acl;
  ```

   이 예제의 마지막 두 행은 Amazon S3에 저장된 테이블을 생성하고 데이터를 테이블에 씁니다.

**Pig에서 미리 준비된 ACL을 사용하여 파일을 쓰려면**
+  Pig 명령 프롬프트에서 `fs.s3.canned.acl` 구성 옵션을 클러스터에서 Amazon S3에 쓰는 파일에 대해 설정할 미리 준비된 ACL로 설정합니다. Pig 명령 프롬프트에 액세스하려면 SSH를 사용하여 마스터 노드에 연결하고 Hadoop 명령 프롬프트에서 Pig를 입력합니다. 자세한 내용은 [SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결](emr-connect-master-node-ssh.md) 단원을 참조하십시오.

   다음 예제에서는 `fs.s3.canned.acl` 구성 옵션을 BucketOwnerFullControl로 설정하여 Amazon S3 버킷 소유자에게 파일을 완벽하게 제어할 수 있는 권한을 부여합니다. set 명령은 미리 준비된 ACL 이름 앞에 공백 하나를 포함하며 물음표는 포함하지 않습니다.

  ```
  pig> set fs.s3.canned.acl BucketOwnerFullControl; 
  store some data into 's3://amzn-s3-demo-bucket/pig/acl';
  ```

**사용자 지정 JAR에서 미리 준비된 ACL을 사용하여 파일을 쓰려면**
+  -D 플래그와 함께 Hadoop을 사용하여 `fs.s3.canned.acl` 옵션을 설정합니다. 아래 예제에는 이 방법이 나와 있습니다.

  ```
  hadoop jar hadoop-examples.jar wordcount 
  -Dfs.s3.canned.acl=BucketOwnerFullControl s3://amzn-s3-demo-bucket/input s3://amzn-s3-demo-bucket/output
  ```

# Amazon EMR 클러스터의 출력을 압축하는 방법
<a name="emr-plan-output-compression"></a>

데이터 처리로 인해 발생하는 출력을 압축하는 여러 방법이 있습니다. 사용하는 압축 도구는 데이터의 속성에 따라 다릅니다. 압축은 대량의 데이터를 전송할 때 성능을 개선할 수 있습니다.

## 출력 데이터 압축
<a name="HadoopOutputDataCompression"></a>

 이 기능은 Hadoop 작업의 출력을 압축합니다. TextOutputFormat을 사용 중인 경우 결과가 gzip 압축된 텍스트 파일로 출력됩니다. SequenceFiles에 쓰려는 경우 결과가 내부적으로 압축되는 SequenceFile로 출력됩니다. 구성 설정 mapred.output.compress를 true로 설정하여 이 기능을 활성화할 수 있습니다.

 스트리밍 작업을 실행 중인 경우 스트리밍 작업을 이러한 인수로 전달하여 활성화할 수 있습니다.

```
1. -jobconf mapred.output.compress=true
```

 또한 부트스트랩 작업을 사용하여 모든 작업 출력을 자동으로 압축할 수도 있습니다. 다음은 Ruby 클라이언트를 사용하여 이 작업을 수행하는 방법입니다.

```
1.    
2. --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
3. --args "-s,mapred.output.compress=true"
```

 마지막으로 사용자 지정 Jar를 작성하려는 경우 작업 생성 시 다음 행을 사용하여 출력 압축을 활성화할 수 있습니다.

```
1. FileOutputFormat.setCompressOutput(conf, true);
```

## 중간 데이터 압축
<a name="HadoopIntermediateDataCompression"></a>

 작업이 상당한 양의 데이터를 매퍼에서 reducer로 재편성하는 경우 중간 압축을 활성화하면 성능이 향상될 수 있습니다. 맵 출력을 압축하고 코어 노드에 도착할 때 압축을 해제합니다. 구성 설정은 mapred.compress.map.output입니다. 출력 압축과 비슷하게 이 기능을 활성화할 수 있습니다.

 사용자 지정 Jar를 작성하려는 경우 다음 명령을 사용합니다.

```
1. conf.setCompressMapOutput(true);
```

## Amazon EMR에서 Snappy 라이브러리 사용
<a name="emr-using-snappy"></a>

Snappy는 속도에 최적화된 압축/압축 해제 라이브러리입니다. Amazon EMR AMI 버전 2.0 이상에서 제공되며 중간 압축을 위한 기본값으로 사용됩니다. Snappy에 대한 자세한 내용은 [http://code.google.com/p/snappy/](http://code.google.com/p/snappy/) 섹션을 참조하세요.