

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

# 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`를 입력하여 생성합니다.

------