

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

# 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/) 섹션을 참조하세요.