

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

# Amazon EMR 2.x 및 3.x AMI 버전
<a name="emr-release-3x"></a>

**참고**  
AWS 는 모든 AWS API 엔드포인트에 대한 TLS 구성을 TLS 1.2의 최소 버전으로 업데이트하고 있습니다. Amazon EMR 릴리스 3.10 이하 버전은 TLS 1.0 및 1.1 연결만 지원합니다. 2023년 12월 4일 이후 Amazon EMR 3.10 이하에서는 클러스터를 생성할 수 없습니다.  
Amazon EMR 3.10 이하를 사용하는 경우 워크로드를 즉시 테스트하고 최신 Amazon EMR 릴리스로 마이그레이션하는 것이 좋습니다. 자세한 내용은 [AWS 보안 블로그](https://aws.amazon.com/blogs//security/tls-1-2-required-for-aws-endpoints/)를 참조하세요.

*AMI 버전*이라고 하는 Amazon EMR 2.x 및 3.x 릴리스는 호환성 때문에 해당 릴리스가 필요한 기존 솔루션에서 사용할 수 있습니다. 이 릴리스 버전으로 새 클러스터나 새 솔루션을 생성하는 것은 권장되지 않습니다. 여기에는 새 릴리스의 기능이 없으며 오래된 애플리케이션 패키지가 포함됩니다.

최신 Amazon EMR 릴리스 버전을 사용하여 솔루션을 구축하는 것이 좋습니다.

2.x 및 3.x 시리즈 릴리스 버전과 최신 Amazon EMR 릴리스 버전 간의 차이는 큽니다. 클러스터의 생성 및 구성 방법부터 클러스터의 애플리케이션 디렉터리 구조 및 포트에 이르기까지 매우 광범위합니다.

이 섹션에서는 Amazon EMR에 대한 가장 두드러진 차이와 특정 애플리케이션 구성 및 관리의 차이를 다룹니다. 이 내용은 포괄적이지 않습니다. 2.x 또는 3.x 시리즈에서 클러스터를 생성하여 사용하면 이 섹션에서 설명하지 않은 차이가 생길 수 있습니다.

**Topics**
+ [Amazon EMR의 이전 AMI 버전을 포함하는 클러스터 생성](emr-3x-create.md)
+ [Amazon EMR의 이전 AMI 버전을 사용하여 애플리케이션 설치](emr-3x-install-apps.md)
+ [Amazon EMR의 이전 AMI 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정](emr-3x-customizeappconfig.md)
+ [Amazon EMR의 이전 AMI 버전에 고유한 Hive 애플리케이션](emr-3x-hive.md)
+ [Amazon EMR의 이전 AMI 버전에 고유한 HBase 애플리케이션](emr-3x-hbase.md)
+ [Amazon EMR의 이전 AMI 버전에 고유한 Pig 애플리케이션](emr-3x-pig.md)
+ [Amazon EMR의 이전 AMI 버전에 고유한 Spark 애플리케이션](emr-3x-spark.md)
+ [Amazon EMR의 이전 AMI 버전에서 S3DistCp 유틸리티 차이](emr-3x-s3distcp.md)

# Amazon EMR의 이전 AMI 버전을 포함하는 클러스터 생성
<a name="emr-3x-create"></a>

Amazon EMR 2.x 및 3.x 릴리스는 AMI 버전으로 참조됩니다. Amazon EMR 릴리스 4.0.0 이상에서 릴리스 레이블(예: `emr-5.11.0`)을 사용하여 릴리스 버전별로 릴리스를 참조합니다. 이 변경 사항은 AWS CLI 또는 프로그래밍 방식으로 클러스터를 생성할 때 가장 명확하게 나타납니다.

 AWS CLI 를 사용하여 AMI 릴리스 버전을 사용하여 클러스터를 생성하는 경우 `--ami-version` 옵션을 사용합니다. 예: `--ami-version 3.11.0`. Amazon EMR 4.0.0 이상에 도입된 여러 옵션, 기능 및 애플리케이션은 `--ami-version`을 지정할 때 사용할 수 없습니다. 자세한 내용은 *AWS CLI 명령 참조*에서 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)를 참조하세요.

다음 예제 AWS CLI 명령은 AMI 버전을 사용하여 클러스터를 시작합니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,\
InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\
InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\
Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]
```

프로그래밍 방식에서는 모든 Amazon EMR 릴리스 버전이 EMR API에서 `RunJobFlowRequest` 작업을 사용하여 클러스터를 생성합니다. 다음은 AMI 릴리스 버전 3.11.0을 사용하여 클러스터를 생성하는 예제 Java 코드입니다.

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("AmiVersion Cluster")
			.withAmiVersion("3.11.0")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

다음 `RunJobFlowRequest` 호출은 릴리스 레이블을 대신 사용합니다.

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("ReleaseLabel Cluster")
			.withReleaseLabel("emr-7.12.0")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

## 클러스터 크기 구성
<a name="emr-3x-cluster-size"></a>

클러스터가 실행되면 Hadoop에서 데이터를 처리하는 데 필요한 매퍼 및 reducer 작업 수를 결정합니다. 클러스터의 규모가 클수록 리소스 사용과 처리 시간 단축을 위해 더 많은 작업을 수행해야 합니다. 일반적으로 EMR 클러스터는 전체 클러스터에서 동일한 크기를 유지합니다. 클러스터를 작성할 때 작업 수를 설정합니다. 실행 중인 클러스터의 크기를 조정할 때 클러스터 실행 중에 처리 방식을 변경할 수 있습니다. 따라서 고정된 수의 작업을 사용하는 대신 클러스터 수명 기간 동안 작업 수를 변경할 수 있습니다. 이상적인 작업 수를 설정하는 데 도움이 되는 두 가지 구성 옵션이 있습니다.
+ `mapred.map.tasksperslot`
+ `mapred.reduce.tasksperslot`

`mapred-conf.xml` 파일에서 두 옵션을 모두 설정할 수 있습니다. 작업을 클러스터에 제출하면 작업 클라이언트는 클러스터 전체에서 사용 가능한 현재 맵 및 reduce 슬롯의 총 수를 확인합니다. 작업 클라이언트는 다음 수식을 사용하여 작업 수를 설정합니다.
+ `mapred.map.tasks` =` mapred.map.tasksperslot` \$1 클러스터의 맵 슬롯
+ `mapred.reduce.tasks` =`mapred.reduce.tasksperslot` \$1 클러스터의 reduce 슬롯

작업 클라이언트는 작업 수가 구성되지 않은 경우 `tasksperslot` 파라미터만 읽습니다. 부트스트랩 작업을 통해 모든 클러스터에 대해 또는 구성을 변경하는 단계를 추가하여 작업마다 개별적으로 언제든지 작업 수를 재정의할 수 있습니다.

Amazon EMR은 태스크 노드 장애를 견디며 태스크 노드를 사용할 수 없게 되더라도 클러스터 실행을 계속합니다. Amazon EMR은 실패한 태스크 노드를 대체하기 위해 추가 태스크 노드를 자동으로 프로비저닝합니다.

클러스터 단계마다 작업 노드의 수가 다를 수 있습니다. 실행 중인 클러스터에 단계를 추가하여 작업 노드의 수를 수정할 수도 있습니다. 모든 단계는 기본적으로 순차적으로 실행되므로 어떤 단계에 대해서도 실행 중인 작업 노드 수를 지정할 수 있습니다.

# Amazon EMR의 이전 AMI 버전을 사용하여 애플리케이션 설치
<a name="emr-3x-install-apps"></a>

AMI 버전을 사용하는 경우 [RunJobflow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html) 작업의 `NewSupportedProducts` 파라미터 사용, 부트스트랩 작업 사용, [Step](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_Step.html) 작업 사용 등 다양한 방법으로 애플리케이션이 설치됩니다.

# Amazon EMR의 이전 AMI 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정
<a name="emr-3x-customizeappconfig"></a>

Amazon EMR 릴리스 버전 4.0.0에서는 구성 분류를 사용하여 애플리케이션을 구성하는 간단한 방법이 도입되었습니다. 자세한 내용은 [애플리케이션 구성](emr-configure-apps.md) 단원을 참조하십시오. AMI 버전을 사용할 때 전달하는 인수와 함께 부트스트랩 작업을 사용하여 애플리케이션을 구성합니다. 예를 들어, `configure-hadoop` 및 `configure-daemons` 부트스트랩 작업은 Hadoop 및 Yarn별 환경 속성(예: `--namenode-heap-size`)을 설정합니다. 최신 버전에서는 이러한 사항이 `hadoop-env` 및 `yarn-env` 구성 분류를 통해 구성됩니다. 일반적인 구성을 수행하는 부트스트랩 작업은 [Github의 emr-bootstrap-actions 리포지토리](https://github.com/awslabs/emr-bootstrap-actions)를 참조하세요.

다음 테이블에서는 부트스트랩 작업을 최신 Amazon EMR 릴리스 버전에 있는 구성 분류에 매핑합니다.


**Hadoop**  

| 영향을 받는 애플리케이션 파일 이름 | AMI 버전 부트스트랩 작업 | 구성 분류 | 
| --- | --- | --- | 
| core-site.xml  | configure-hadoop -c  | core-site | 
| log4j.properties  | configure-hadoop -l  | hadoop-log4j | 
| hdfs-site.xml  | configure-hadoop -s  | hdfs-site  | 
| 해당 사항 없음 | 해당 사항 없음 | hdfs-encryption-zones | 
| mapred-site.xml  | configure-hadoop -m  | mapred-site | 
| yarn-site.xml  | configure-hadoop -y  | yarn-site | 
| httpfs-site.xml  | configure-hadoop -t  | httpfs-site | 
| capacity-scheduler.xml  | configure-hadoop -z  | capacity-scheduler | 
| yarn-env.sh  | configure-daemons --resourcemanager-opts | yarn-env | 


**Hive**  

| 영향을 받는 애플리케이션 파일 이름 | AMI 버전 부트스트랩 작업 | 구성 분류 | 
| --- | --- | --- | 
| hive-env.sh | 해당 사항 없음 | hive-env | 
| hive-site.xml | hive-script --install-hive-site \$1\$1MY\$1HIVE\$1SITE\$1FILE\$1 | hive-site | 
| hive-exec-log4j.properties | 해당 사항 없음 | hive-exec-log4j | 
| hive-log4j.properties | 해당 사항 없음 | hive-log4j | 


**EMRFS**  

| 영향을 받는 애플리케이션 파일 이름 | AMI 버전 부트스트랩 작업 | 구성 분류 | 
| --- | --- | --- | 
| emrfs-site.xml | configure-hadoop -e | emrfs-site | 
| 해당 사항 없음 | s3get -s s3://custom-provider.jar -d /usr/share/aws/emr/auxlib/ | emrfs-site(새로운 설정 fs.s3.cse.encryptionMaterialsProvider.uri 지원) | 

모든 분류 목록을 보려면 [애플리케이션 구성](emr-configure-apps.md) 섹션을 참조하세요.

## 애플리케이션 환경 변수
<a name="emr-3x-appenv"></a>

AMI 버전을 사용할 때 Hadoop 환경을 구성하기 위해 `hadoop-user-env.sh` 스크립트가 `configure-daemons` 부트스트랩 작업과 함께 사용됩니다. 이 스크립트에는 다음 작업이 포함되어 있습니다.

```
#!/bin/bash 
export HADOOP_USER_CLASSPATH_FIRST=true; 
echo "HADOOP_CLASSPATH=/path/to/my.jar" >> /home/hadoop/conf/hadoop-user-env.sh
```

Amazon EMR 릴리스 4.x에서는 다음 예제에 표시된 대로 `hadoop-env` 구성 분류를 사용하여 동일하게 수행할 수 있습니다.

```
[ 
      { 
         "Classification":"hadoop-env",
         "Properties":{ 

         },
         "Configurations":[ 
            { 
               "Classification":"export",
               "Properties":{ 
                  "HADOOP_USER_CLASSPATH_FIRST":"true",
                  "HADOOP_CLASSPATH":"/path/to/my.jar"
               }
            }
         ]
      }
   ]
```

또 다른 예로, `configure-daemons`를 사용하고 `--namenode-heap-size=2048` 및 `--namenode-opts=-XX:GCTimeRatio=19`를 전달하는 것은 다음 구성 분류와 동일합니다.

```
[ 
      { 
         "Classification":"hadoop-env",
         "Properties":{ 

         },
         "Configurations":[ 
            { 
               "Classification":"export",
               "Properties":{ 
                  "HADOOP_DATANODE_HEAPSIZE":  "2048",
           	"HADOOP_NAMENODE_OPTS":  "-XX:GCTimeRatio=19"
               }
            }
         ]
      }
   ]
```

다른 애플리케이션 환경 변수는 더 이상 `/home/hadoop/.bashrc`에 정의되지 않습니다. 대신 `/etc/default`과 같이 구성 요소별 또는 애플리케이션별 `/etc/default/hadoop` 파일에서 주로 설정됩니다. 또한 애플리케이션 RPM에서 설치한 `/usr/bin/`의 래퍼 스크립트는 실제 빈 스크립트를 포함하기 전에 추가 환경 변수를 설정할 수 있습니다.

## 서비스 포트
<a name="emr-3x-serviceports"></a>

AMI 버전을 사용할 때 일부 서비스에서는 사용자 지정 포트를 사용합니다.


**포트 설정의 변경**  

| 설정 | AMI 버전 3.x | 오픈 소스 기본값 | 
| --- | --- | --- | 
| fs.default.name | hdfs://emrDeterminedIP:9000 | 기본값(hdfs://emrDeterminedIP:8020)  | 
| dfs.datanode.address | 0.0.0.0:9200 | 기본값(0.0.0.0:50010)  | 
| dfs.datanode.http.address | 0.0.0.0:9102 | 기본값(0.0.0.0:50075)  | 
| dfs.datanode.https.address | 0.0.0.0:9402 | 기본값(0.0.0.0:50475) | 
| dfs.datanode.ipc.address | 0.0.0.0:9201 | 기본값(0.0.0.0:50020) | 
| dfs.http.address | 0.0.0.0:9101 | 기본값(0.0.0.0:50070)  | 
| dfs.https.address | 0.0.0.0:9202 | 기본값(0.0.0.0:50470)  | 
| dfs.secondary.http.address | 0.0.0.0:9104 | 기본값(0.0.0.0:50090) | 
| yarn.nodemanager.address | 0.0.0.0:9103 | 기본값(\$1\$1yarn.nodemanager.hostname\$1:0)  | 
| yarn.nodemanager.localizer.address  | 0.0.0.0:9033 | 기본값(\$1\$1yarn.nodemanager.hostname\$1:8040) | 
| yarn.nodemanager.webapp.address | 0.0.0.0:9035 | 기본값(\$1\$1yarn.nodemanager.hostname\$1:8042) | 
| yarn.resourcemanager.address | emrDeterminedIP:9022 | 기본값(\$1\$1yarn.resourcemanager.hostname\$1:8032) | 
| yarn.resourcemanager.admin.address | emrDeterminedIP:9025 | 기본값(\$1\$1yarn.resourcemanager.hostname\$1:8033) | 
| yarn.resourcemanager.resource-tracker.address | emrDeterminedIP:9023 | 기본값(\$1\$1yarn.resourcemanager.hostname\$1:8031) | 
| yarn.resourcemanager.scheduler.address | emrDeterminedIP:9024 | 기본값(\$1\$1yarn.resourcemanager.hostname\$1:8030) | 
| yarn.resourcemanager.webapp.address | 0.0.0.0:9026  | 기본값(\$1\$1yarn.resourcemanager.hostname\$1:8088) | 
| yarn.web-proxy.address | emrDeterminedIP:9046  | 기본값(값 지정 안 함)  | 
| yarn.resourcemanager.hostname | 0.0.0.0(기본값)  | emrDeterminedIP | 

**참고**  
*emrDeterminedIP*는 Amazon EMR에서 생성되는 IP 주소입니다.

## Users
<a name="emr-3x-users"></a>

AMI 버전을 사용할 때 `hadoop` 사용자는 모든 프로세스를 실행하고 모든 파일을 소유합니다. Amazon EMR 릴리스 버전 4.0.0 이상에서는 사용자가 애플리케이션 및 구성 요소 수준에 존재합니다.

## 설치 시퀀스, 설치된 아티팩트 및 로그 파일 위치
<a name="emr-3x-directories"></a>

AMI 버전을 사용할 때 애플리케이션 아티팩트 및 구성 요소 디렉터리는 `/home/hadoop/application` 디렉터리에 설치됩니다. 예를 들어, Hive를 설치한 경우 디렉터리는 `/home/hadoop/hive`입니다. Amazon EMR 릴리스 4.0.0 이상에서는 애플리케이션 아티팩트가 `/usr/lib/application` 디렉터리에 설치됩니다. AMI 버전을 사용할 때 로그 파일은 다양한 위치에 저장됩니다. 아래 표에는 위치가 나열되어 있습니다.


**Amazon S3에서 로그 위치의 변경**  

| 대몬(daemon) 또는 애플리케이션 | 디렉터리 위치 | 
| --- | --- | 
| 인스턴스 상태 | node/instance-id/instance-state/ | 
| hadoop-hdfs-namenode | daemons/instance-id/hadoop-hadoop-namenode.log | 
| hadoop-hdfs-datanode | daemons/instance-id/hadoop-hadoop-datanode.log | 
| hadoop-yarn(ResourceManager) | daemons/instance-id/yarn-hadoop-resourcemanager | 
| Hadoop yarn(프록시 서버) | daemons/instance-id/yarn-hadoop-proxyserver | 
| mapred-historyserver | daemons/instance-id/ | 
| httpfs | daemons/instance-id/httpfs.log | 
| hive-server | node/instance-id/hive-server/hive-server.log | 
| hive-metastore | node/instance-id/apps/hive.log | 
| Hive CLI | node/instance-id/apps/hive.log | 
| YARN 애플리케이션 사용자 로그 및 컨테이너 로그 | task-attempts/ | 
| Mahout | 해당 사항 없음 | 
| Pig | 해당 사항 없음 | 
| spark-historyserver | 해당 사항 없음 | 
| mapreduce 작업 기록 파일 | jobs/ | 

## Command Runner
<a name="emr-differences-commandrunner"></a>

AMI 버전을 사용할 때 `/home/hadoop/contrib/streaming/hadoop-streaming.jar` 등의 여러 스크립트 또는 프로그램이 셸 로그인 경로 환경에 배치되지 않으므로, command-runner.jar 또는 script-runner.jar 등 jar 파일을 사용하여 스크립트를 실행할 경우 전체 경로를 지정해야 합니다. `command-runner.jar`은 AMI에 있으므로 `script-runner.jar`의 경우처럼 전체 URI를 알 필요가 없습니다.

## 복제 인수
<a name="emr-3x-replication"></a>

복제 인수를 사용하면 Hadoop JVM을 시작할 시기를 구성할 수 있습니다. 모든 작업에 대해 새 Hadoop JVM을 시작하여 작업을 보다 효과적으로 격리하거나, 작업 간에 JVM을 공유하여 프레임워크 오버헤드를 낮출 수 있습니다. 많은 작은 파일을 처리하려는 경우에는 JVM을 여러 번 재사용하여 시작 비용을 분할 상환하는 것이 합리적입니다. 하지만 각 작업마다 오랜 시간이 걸리거나 대량의 데이터를 처리하는 경우에는 모든 메모리가 후속 작업을 위해 해제될 수 있도록 JVM을 재사용하지 않도록 선택할 수 있습니다. AMI 버전을 사용할 때 `configure-hadoop` 부트스트랩 작업을 사용하여 복제 인수를 `mapred.job.reuse.jvm.num.tasks` 속성으로 설정하도록 사용자 지정할 수 있습니다.

다음은 무제한 JVM 재사용을 위해 JVM 재사용 인수를 설정한 예입니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge \
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\
Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]
```

# Amazon EMR의 이전 AMI 버전에 고유한 Hive 애플리케이션
<a name="emr-3x-hive"></a>

## 로그 파일
<a name="emr-3x-hive-log-files"></a>

Amazon EMR AMI 버전 2.x 및 3.x를 사용하면 Hive 로그가 `/mnt/var/log/apps/`에 저장됩니다. Hive의 동시 버전을 지원하려면 다음 표와 같이 실행하는 Hive 버전에 따라 로그 파일 이름이 결정됩니다.


| Hive 버전 | 로그 파일 이름 | 
| --- | --- | 
| 0.13.1 | hive.log  이 버전부터 Amazon EMR은 버전 관리 미사용 파일 이름(`hive.log`)을 사용합니다. 마이너 버전은 메이저 버전과 동일한 로그 위치를 공유합니다.  | 
| 0.11.0 | hive\$10110.log   Hive 0.11.0의 마이너 버전(예: 0.11.0.1)은 Hive 0.11.0과 동일한 로그 파일 위치를 공유합니다.  | 
| 0.8.1 | hive\$1081.log   Hive 0.8.1의 마이너 버전(예: 0.8.1.1)은 Hive 0.8.1과 동일한 로그 파일 위치를 공유합니다.  | 
| 0.7.1 | hive\$107\$11.log   Hive 0.7.1의 마이너 버전(예: Hive 0.7.1.3 및 Hive 0.7.1.4)은 Hive 0.7.1과 동일한 로그 파일 위치를 공유합니다.   | 
| 0.7 | hive\$107.log | 
| 0.5 | hive\$105.log | 
| 0.4 | hive.log | 

## 분할 입력 기능
<a name="emr-3x-hive-split-input"></a>

0.13.1 이전의 Hive 버전(3.11.0 이전의 Amazon EMR AMI 버전)을 사용하여 분할 입력 기능을 구현하려면 다음을 사용합니다.

```
hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat;
hive> set mapred.min.split.size=100000000;
```

이 기능은 Hive 0.13.1에서 더 이상 사용되지 않습니다. Amazon EMR AMI 버전 3.11.0에서 동일한 분할 입력 형식 기능을 사용하려면 다음을 사용합니다.

```
set hive.hadoop.supports.splittable.combineinputformat=true;
```

## Thrift 서비스 포트
<a name="emr-3x-hive-thrift-service"></a>

 Thrift는 나중에 분석할 수 있도록 데이터 구조를 유지하는 데 사용되는 압축된 이진 직렬화 형식을 정의하는 RPC 프레임워크입니다. 일반적으로 Hive는 다음 포트에서 작동하도록 서버를 구성합니다.


| Hive 버전 | 포트 번호 | 
| --- | --- | 
| Hive 0.13.1 | 10000 | 
| Hive 0.11.0 | 10004 | 
| Hive 0.8.1 | 10003 | 
| Hive 0.7.1 | 10002 | 
| Hive 0.7 | 10001 | 
| Hive 0.5 | 10000 | 

 Thrift 서비스에 대한 자세한 내용은 를 참조하세요[http://wiki.apache.org/thrift/](http://wiki.apache.org/thrift/) 

## Hive를 사용하여 파티션 복구
<a name="emr-3x-hive-recover-partition"></a>

Amazon EMR에는 Amazon S3에 있는 테이블 데이터에서 테이블의 파티션을 복구하는 Hive 쿼리 언어의 문이 포함되어 있습니다. 다음 예제는 이 작업을 보여 줍니다.

```
CREATE EXTERNAL TABLE (json string) raw_impression 
PARTITIONED BY (dt string) 
LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions';
ALTER TABLE logs RECOVER PARTITIONS;
```

파티션 디렉터리 및 데이터가 테이블 정의에 지정된 위치에 있어야 하며 Hive 규칙에 따라 이름이 지정되어야 합니다. 예: `dt=2009-01-01`.

**참고**  
Hive 0.13.1 이후에는 이 기능이 `msck repair table`을 사용하여 기본적으로 지원되므로 `recover partitions`가 지원되지 않습니다. 자세한 내용은 [https://cwiki.apache.org/confluence/display/Hive/LanguageManual\$1DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL)을 참조하세요.

## 스크립트에 Hive 변수 전달
<a name="emr-3x-hive-pass-variable"></a>

를 사용하여 Hive 단계에 변수를 전달하려면 다음 명령을 AWS CLI입력하고 *myKey*를 EC2 키 페어의 이름으로 바꾸고 *amzn-s3-demo-bucket*을 버킷 이름으로 바꿉니다. 이 예에서 `SAMPLE`은 앞에 `-d` 스위치가 붙는 변수 값입니다. 이 변수는 Hive 스크립트에서 `${SAMPLE}`로 정의됩니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.9 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 \
--steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,\
Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,\
INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/,\
-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]
```

## 외부 메타스토어 위치 지정
<a name="emr-3x-hive-external-metastore"></a>

다음 절차에서는 Hive 메타스토어 위치에 대한 기본 구성 값을 재정의하고 재구성된 메타스토어 위치를 사용하여 클러스터를 시작하는 방법을 보여 줍니다.

**EMR 클러스터 외부에 위치한 메타스토어를 생성하려면**

1. Amazon RDS를 사용하여 MySQL 또는 Aurora 데이터베이스를 생성합니다.

   Amazon RDS 데이터베이스 생성 방법에 대한 자세한 내용은 [Amazon RDS 시작하기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.html)를 참조하세요.

1. 데이터베이스와 **ElasticMapReduce-Master** 보안 그룹 간의 JDBC 연결을 허용하도록 보안 그룹을 수정합니다.

   액세스를 위해 보안 그룹을 수정하는 방법에 대한 자세한 내용은 *Amazon RDS 사용 설명서*에서 [Amazon RDS 보안 그룹](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)을 참조하세요.

1. `hive-site.xml`에서 JDBC 구성 값을 설정합니다.

   1. 다음 사항이 포함된 `hive-site.xml` 구성 파일을 생성합니다.

      ```
      <configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mariadb://hostname:3306/hive?createDatabaseIfNotExist=true</value>
          <description>JDBC connect string for a JDBC metastore</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>Username to use against metastore database</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>password</value>
          <description>Password to use against metastore database</description>
        </property>
      </configuration>
      ```

      *hostname*은 데이터베이스를 실행하는 Amazon RDS 인스턴스의 DNS 주소입니다. *username* 및 *password*는 데이터베이스의 보안 인증입니다. MySQL 및 Aurora 데이터베이스 인스턴스에 연결하는 방법에 대한 자세한 내용은 *Amazon RDS 사용 설명서*에서 [MySQL 데이터베이스 엔진 기반 DB 인스턴스에 연결하기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html) 및 [Aurora DB 클러스터에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connecting.html)을 참조하세요.

      JDBC 드라이버는 Amazon EMR에서 설치됩니다.
**참고**  
값 속성에는 공백이나 캐리지 리턴이 포함되어서는 안 됩니다. 속성은 모두 한 줄에 나타나야 합니다.

   1. `hive-site.xml` 파일을 Amazon S3 위의 한 위치로 이동합니다(예: `s3://amzn-s3-demo-bucket/hive-site.xml`).

1. 클러스터를 생성하고 사용자 지정된 `hive-site.xml` 파일의 Amazon S3 위치를 지정합니다.

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

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.10 \
   --applications Name=Hue Name=Hive Name=Pig \
   --use-default-roles --ec2-attributes KeyName=myKey \
   --instance-type m3.xlarge --instance-count 3 \
   --bootstrap-actions Name="Install Hive Site Configuration",\
   Path="s3://region.elasticmapreduce/libs/hive/hive-script",\
   Args=["--base-path","s3://elasticmapreduce/libs/hive","--install-hive-site",\
   "--hive-site=s3://amzn-s3-demo-bucket/hive-site.xml","--hive-versions","latest"]
   ```

## JDBC를 사용하여 Hive에 연결
<a name="emr-3x-hive-jdbc"></a>

JDBC를 통해 Hive에 연결하려면 JDBC 드라이버를 다운로드하고 SQL 클라이언트를 설치해야 합니다. 다음 예제에서는 SQL Workbench/J에서 JDBC를 사용하여 Hive에 연결하는 방법을 보여 줍니다.

**JDBC 드라이버를 다운로드하려면**

1. 액세스하려는 Hive 버전에 적합한 드라이버를 다운로드하고 압축을 풉니다. Hive 버전은 Amazon EMR 클러스터를 생성할 때 선택하는 AMI에 따라 다릅니다.
   + Hive 0.13.1 JDBC 드라이버: [https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC\$11.0.4.1004.zip](https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC_1.0.4.1004.zip)
   + Hive 0.11.0 JDBC 드라이버: [https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0)
   + Hive 0.8.1 JDBC 드라이버: [https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1)

1. 자세한 내용은 SQL Workbench/J 사용 설명서에서 [Installing and starting SQL Workbench/J](http://www.sql-workbench.net/manual/install.html)를 참조하세요.

1. 클러스터 마스터 노드에 대한 SSH 터널을 생성합니다. 연결용 포트는 Hive 버전에 따라 달라집니다. 예제 명령은 Linux `ssh` 사용자의 경우 아래 표에, Windows 사용자의 경우 PuTTY 명령에 제공됩니다.  
**Linux SSH 명령**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hive.html)  
**Windows PuTTY 터널 설정**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. JDBC 드라이버를 SQL Workbench에 추가합니다.

   1. **Select Connection Profile(연결 프로필 선택)** 대화 상자에서 **Manage Drivers(드라이버 관리)**를 선택합니다.

   1. **Create a new entry(새 항목 생성)**(빈 페이지) 아이콘을 선택합니다.

   1. **Name(이름)** 필드에 **Hive JDBC**을(를) 입력합니다.

   1. **라이브러리**에서 **Select the JAR file(s)(JAR 파일 선택)** 아이콘을 클릭합니다.

   1. 다음 표에 표시된 대로 JAR 파일을 선택합니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hive.html)

   1. **Please select one driver(드라이버 하나를 선택하세요)** 대화 상자에서 다음 표에 해당하는 드라이버를 선택하고 **확인**을 클릭합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. **연결 프로파일 선택** 대화 상자로 돌아가서 **드라이버** 필드가 **Hive JDBC**로 설정되어 있는지 확인하고 다음 표에 따라 **URL** 필드에 JDBC 연결 문자열을 제공합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hive.html)

   클러스터가 AMI 버전 3.3.1 이상을 사용하는 경우 **연결 프로파일 선택** 대화 상자에서 **사용자 이름** 필드에 **hadoop**을 입력합니다.

# Amazon EMR의 이전 AMI 버전에 고유한 HBase 애플리케이션
<a name="emr-3x-hbase"></a>

## 지원되는 HBase 버전
<a name="emr-3x-hbase-versions"></a>


| HBase 버전 | AMI 버전 | AWS CLI 구성 파라미터 | HBase 버전 세부 정보 | 
| --- | --- | --- | --- | 
| [0.94.18](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.1.0 이상 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3` `--applications Name=HBase`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-hbase.html)  | 
| [0.94.7](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.0-3.0.4 |  `--ami-version 3.0` `--applications Name=HBase`  | 
| [0.92](https://svn.apache.org/repos/asf/hbase/branches/0.92/CHANGES.txt) | 2.2 이상 |  `--ami-version 2.2 or later` `--applications Name=HBase`  | 

## HBase 클러스터 필수 조건
<a name="emr-3x-hbase-prerequisites"></a>

Amazon EMR AMI 버전 2.x 및 3.x를 사용하여 생성된 클러스터는 HBase에 대한 다음 요구 사항을 충족해야 합니다.
+  AWS CLI (선택 사항) - 명령줄을 사용하여 HBase와 상호 작용하려면 최신 버전의를 다운로드하여 설치합니다 AWS CLI. 자세한 내용은 *AWS Command Line Interface 사용자 가이드*에서 [AWS Command Line Interface설치](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)를 참조하세요.
+ 최소 두 개의 인스턴스(선택 사항) - 클러스터의 프라이머리 노드는 HBase 마스터 서버와 Zookeeper를 실행하고, 태스크 노드는 HBase 리전 서버를 실행합니다. 최상의 성능을 위해 HBase 클러스터는 최소 두 개의 EC2 인스턴스에서 실행해야 하지만 평가를 위해 단일 노드에서 HBase를 실행할 수 있습니다.
+ 장기 실행 클러스터 - HBase는 장기 실행 클러스터에서만 실행됩니다. 기본적으로 CLI 및 Amazon EMR 콘솔은 장기 실행 클러스터를 생성합니다.
+ Amazon EC2 키 페어 세트(권장) - Secure Shell(SSH) 네트워크 프로토콜을 사용하여 프라이머리 노드에 연결하고 HBase 쉘 명령을 실행하려면 클러스터를 생성할 때 Amazon EC2 키 페어를 사용해야 합니다.
+ 올바른 AMI 및 Hadoop 버전 - HBase 클러스터는 현재 Hadoop 20.205 이상에서만 지원됩니다.
+ Ganglia(선택 사항) - HBase 성능 지표를 모니터링하려면 클러스터를 생성할 때 Ganglia를 설치합니다.
+ 로그용 Amazon S3 버킷(선택 사항) - HBase의 로그는 프라이머리 노드에서 사용할 수 있습니다. 이 로그를 Amazon S3에 복사하려면 클러스터를 생성할 때 로그 파일을 수신하는 S3 버킷을 지정합니다.

## HBase를 포함하는 클러스터 생성
<a name="emr-3x-hbase-launch"></a>

다음 테이블에는 콘솔에서 Amazon EMR AMI 릴리스 버전을 사용하여 HBase가 설치된 클러스터를 생성할 때 사용할 수 있는 옵션이 나열되어 있습니다.


| Field | 작업 | 
| --- | --- | 
| 백업에서 복원 | Amazon S3에 저장된 데이터를 포함하는 HBase 클러스터를 미리 로드할지 여부를 지정합니다. | 
| 백업 위치 | 복원할 백업이 있는 Amazon S3의 URI를 지정합니다. | 
| 백업 버전 | 선택적으로 백업 위치에서 사용할 백업의 버전 이름을 지정합니다. 이 필드를 비워두면 Amazon EMR에서 백업 위치의 최신 백업을 사용하여 새 HBase 클러스터를 채웁니다. | 
| 정기 백업 예약 | 자동 증분 백업을 예약할지 여부를 지정합니다. 첫 번째 백업은 이후의 증분 백업에 대한 기준을 생성하기 위한 전체 백업입니다. | 
| 일관적 백업 | 백업의 일관성 여부를 지정합니다. 일관된 백업은 초기 백업 단계, 즉 노드 간 동기화 중에 쓰기 작업을 일시 중지하는 백업입니다. 이렇게 일시 중지된 쓰기 작업은 대기열에 배치되고 동기화가 완료되면 다시 시작됩니다. | 
| Backup frequency(백업 빈도) | 예약된 백업 간의 일/시간/분입니다. | 
| 백업 위치 | 백업이 저장되는 Amazon S3 URI입니다. 올바른 차등 백업을 유지하려면 각 HBase 클러스터의 백업 위치가 달라야 합니다. | 
| 백업 시작 시간 | 첫 번째 백업의 발생 시점을 지정합니다. 클러스터가 실행되는 즉시 첫 번째 백업이 시작되도록 now로 설정하거나, [ISO 형식](http://www.w3.org/TR/NOTE-datetime)으로 날짜와 시간을 입력할 수 있습니다. 예를 들어, 2012-06-15T20:00Z는 시작 시간을 2012년 6월 15일 오후 8시(UTC)로 설정합니다. | 

다음 예제 AWS CLI 명령은 HBase 및 기타 애플리케이션을 사용하여 클러스터를 시작합니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
               --applications Name=Hue Name=Hive Name=Pig Name=HBase \
               --use-default-roles --ec2-attributes KeyName=myKey \
               --instance-type c1.xlarge --instance-count 3 --termination-protected
```

이전 절차와 같이 Hive 및 HBase 클러스터 간의 연결이 설정된 후 Hive에 외부 테이블을 만들어서 HBase 클러스터에 저장된 데이터에 액세스할 수 있습니다.

Hive 프롬프트에서 실행할 때 다음 예제는 `inputTable`이라는 HBase 테이블에 저장된 데이터를 참조하는 외부 테이블을 생성합니다. 그러면 Hive 명령문의 `inputTable`을 참조하여 HBase 클러스터에 저장된 데이터를 쿼리 및 수정할 수 있습니다.

**참고**  
다음 예제에서는 AMI 2.3.3의 **protobuf-java-2.4.0a.jar**을 사용하지만, 버전에 일치하도록 예제를 수정해야 합니다. 보유하고 있는 프로토콜 버퍼 JAR의 버전을 확인하려면 Hive 명령 프롬프트에서 `! ls /home/hadoop/lib;` 명령을 실행합니다.

```
add jar lib/emr-metrics-1.0.jar ;
               add jar lib/protobuf-java-2.4.0a.jar ;
               
               set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ;
               
               create external table inputTable (key string, value string)
                    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
                     with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1")
                     tblproperties ("hbase.table.name" = "t1");
               
               select count(*) from inputTable ;
```

## HBase 구성 사용자 지정
<a name="emr-3x-hbase-customize"></a>

대부분의 애플리케이션에서는 기본 설정이 작동해야 하지만 HBase 구성 설정을 유연하게 수정할 수 있습니다. 이렇게 하려면 다음 두 개의 부트스트랩 작업 스크립트 중 하나를 실행합니다.
+ **configure-hbase-daemons** - master, regionserver, zookeeper daemons의 속성을 구성합니다. 이러한 속성에는 HBase 대몬이 시작될 때 JVM(Java Virtual Machine)에 전달할 힙 크기와 옵션이 포함됩니다. 부트스트랩 작업에서 이러한 속성을 인수로 설정합니다. 이 부트스트랩 작업은 HBase 클러스터의 /home/hadoop/conf/hbase-user-env.sh 구성 파일을 수정합니다.
+ **configure-hbase** - HBase 마스터가 바인딩해야 하는 포트, 클라이언트 CLI가 작업을 재시도해야 하는 최대 횟수 등 HBase 사이트별 설정을 구성합니다. 이를 부트스트랩 작업의 인수로 하나씩 설정하거나 Amazon S3에서 XML 구성 파일의 위치를 지정할 수 있습니다. 이 부트스트랩 작업은 HBase 클러스터의 /home/hadoop/conf/hbase-site.xml 구성 파일을 수정합니다.

**참고**  
이러한 스크립트는 다른 부트스트랩 작업과 마찬가지로 클러스터를 만들 때만 실행할 수 있습니다. 현재 실행중인 HBase 클러스터의 구성을 변경하는 데 사용할 수 없습니다.

**configure-hbase** 또는 **configure-hbase-daemons** 부트스트랩 작업을 실행할 경우 지정한 값이 기본값을 재정의합니다. 명시적으로 설정하지 않은 값은 기본값을 받습니다.

이러한 부트스트랩 작업으로 HBase를 구성하는 것은 Amazon EMR에서 부트스트랩 작업을 사용하여 Hadoop 설정 및 Hadoop 대몬(daemon) 속성을 구성하는 것과 유사합니다. 차이점은 HBase에는 프로세스별 메모리 옵션이 없다는 것입니다. 대신 `--daemon-opts` 인수를 사용하여 메모리 옵션을 설정합니다. 여기서 *daemon*은 구성할 대몬의 이름으로 바뀝니다.

### HBase 대몬(daemon) 구성
<a name="emr-3x-hbase-configure-daemons"></a>

 Amazon EMR은 HBase 대몬(daemon)의 구성을 변경하는 데 사용할 수 있는 부트스트랩 작업 `s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons`를 제공합니다. 여기서 *region*은 HBase 클러스터가 시작되는 리전입니다.

를 사용하여 HBase 데몬을 구성하려면 클러스터를 시작할 때 `configure-hbase-daemons` 부트스트랩 작업을 AWS CLI추가하여 하나 이상의 HBase 데몬을 구성합니다. 다음 속성을 설정할 수 있습니다.


| 속성 | 설명 | 
| --- | --- | 
| hbase-master-opts | JVM이 마스터 대몬을 실행하는 방식을 제어하는 옵션입니다. 설정된 경우 기본 HBASE\$1MASTER\$1OPTS 변수를 재정의합니다. | 
| regionserver-opts | JVM이 리전 서버 대몬을 실행하는 방식을 제어하는 옵션입니다. 설정된 경우 기본 HBASE\$1REGIONSERVER\$1OPTS 변수를 재정의합니다. | 
| zookeeper-opts | JVM이 zookeeper 대몬을 실행하는 방식을 제어하는 옵션입니다. 설정된 경우 기본 HBASE\$1ZOOKEEPER\$1OPTS 변수를 재정의합니다. | 

이 옵션에 대한 자세한 내용은 HBase 설명서의 [hbase-env.sh](https://hbase.apache.org/book.html#hbase.env.sh)를 참조하세요.

`zookeeper-opts` 및 `hbase-master-opts`에 대한 값을 구성하기 위한 부트스트랩 작업은 다음 예에 표시되어 있습니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-daemons,\
Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"]
```

### HBase 사이트 설정 구성
<a name="emr-3x-hbase-configure-site"></a>

Amazon EMR은 HBase의 구성을 변경하는 데 사용할 수 있는 부트스트랩 작업 `s3://elasticmapreduce/bootstrap-actions/configure-hbase`를 제공합니다. 구성 값을 부트스트랩 작업의 인수로 하나씩 설정하거나 Amazon S3에서 XML 구성 파일의 위치를 지정할 수 있습니다. 일부 구성 설정만 설정해야 하는 경우 구성 값을 하나씩 설정하는 것이 유용합니다. 변경해야 할 사항이 많거나 재사용할 수 있도록 구성 설정을 저장하려는 경우 XML 파일을 사용하여 설정하는 것이 유용합니다.

**참고**  
Amazon S3 버킷 이름의 접두사로 리전 접두사를 붙일 수 있습니다(예: `s3://region.elasticmapreduce/bootstrap-actions/configure-hbase`) 여기서 *region*은 HBase 클러스터를 시작하는 리전입니다.

이 부트스트랩 작업은 HBase 클러스터의 `/home/hadoop/conf/hbase-site.xml` 구성 파일을 수정합니다. HBase 클러스터가 시작될 경우에만 부트스트랩 작업을 실행할 수 있습니다.

구성할 수 있는 HBase 사이트 설정에 대한 자세한 내용은 HBase 설명서에서 [Default configuration](http://hbase.apache.org/book.html#config.files)을 참조하세요.

HBase 클러스터 시작 시 `configure-hbase` 부트스트랩 작업을 설정하고 변경할 `hbase-site.xml` 내에서 값을 지정합니다.

**를 사용하여 개별 HBase 사이트 설정을 지정하려면 AWS CLI**
+ `hbase.hregion.max.filesize` 설정을 변경하려면 다음 명령을 입력하고 *myKey*를 Amazon EC2 키 페어의 이름으로 바꿉니다.
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

  ```
  aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
  --applications Name=Hue Name=Hive Name=Pig Name=HBase \
  --use-default-roles --ec2-attributes KeyName=myKey \
  --instance-type c1.xlarge --instance-count 3 --termination-protected \
  --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"]
  ```

**를 사용하여 XML 파일로 HBase 사이트 설정을 지정하려면 AWS CLI**

1. 사용자 지정 `hbase-site.xml` 버전을 생성합니다. 사용자 지정 파일은 유효한 XML이어야 합니다. 오류 발생 가능성을 줄이려면 파일을 처음부터 새로 생성하는 대신에 `/home/hadoop/conf/hbase-site.xml`의 Amazon EMR HBase 프라이머리 노드에 위치한 `hbase-site.xml`의 기본 복사본으로 시작하여 해당 파일의 복사본을 편집합니다. 새 파일에 새 이름을 지정하거나 `hbase-site.xml`를 그대로 사용할 수 있습니다.

1. 사용자 지정 `hbase-site.xml` 파일을 Amazon S3 버킷에 업로드합니다. 클러스터를 시작하는 AWS 계정이 파일에 액세스할 수 있도록 권한이 설정되어 있어야 합니다. 클러스터를 시작하는 AWS 계정이 Amazon S3 버킷도 소유한 경우 액세스할 수 있습니다.

1. HBase 클러스터 시작 시 **configure-hbase** 부트스트랩 작업을 설정하고 사용자 지정 `hbase-site.xml` 파일의 위치를 포함합니다. 다음 예제에서는 HBase 사이트 구성 값을 `s3://amzn-s3-demo-bucket/my-hbase-site.xml` 파일에 지정된 값으로 설정합니다. 다음 명령을 입력하고 *myKey*를 EC2 키 페어의 이름으로 바꾸고 *amzn-s3-demo-bucket*을 Amazon S3 버킷의 이름으로 바꿉니다.
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
           --applications Name=Hue Name=Hive Name=Pig Name=HBase \
           --use-default-roles --ec2-attributes KeyName=myKey \
           --instance-type c1.xlarge --instance-count 3 --termination-protected \
           --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-config-file","s3://amzn-s3-demo-bucket/config.xml"]
   ```

   HBase 작업을 사용자 지정하는 옵션을 두 개 이상 지정하는 경우 다음 예제에 표시된 대로 각 키-값 쌍 앞에 `-s` 옵션 스위치를 추가해야 합니다.

   ```
          --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","zookeeper.session.timeout=60000"]
   ```

프록시 세트와 SSH 연결이 열린 상태에서 http://*master-public-dns-name*:60010/master-status가 포함된 브라우저 창을 열어서 HBase UI를 볼 수 있습니다. 여기서 *master-public-dns-name*은 HBase클러스터에 있는 마스터 노드의 퍼블릭 DNS 주소입니다.

SSH를 사용하여 마스터 노드에 연결하고 `mnt/var/log/hbase` 디렉터리로 이동하여 현재 HBase 로그를 볼 수 있습니다. 클러스터가 시작될 때 Amazon S3에 대한 로깅이 활성화되지 않은 경우 이 로그는 클러스터가 종료된 후 사용할 수 없습니다.

## HBase 백업 및 복원
<a name="emr-3x-hbase-backup-restore"></a>

Amazon EMR은 수동 또는 자동 일정에 따라 HBase 데이터를 Amazon S3에 백업하는 기능을 제공합니다. 전체 및 증분 백업을 모두 수행할 수 있습니다. HBase 데이터의 백업 버전이 있으면 해당 버전을 HBase 클러스터로 복원할 수 있습니다. 현재 실행중인 HBase 클러스터로 복원하거나 백업된 데이터로 미리 채워진 새 클러스터를 시작할 수 있습니다.

백업 프로세스 중에 HBase는 쓰기 명령을 계속 실행합니다. 이렇게 하면 백업 중에 클러스터를 계속 사용할 수 있지만 백업 중인 데이터와 모든 쓰기 작업을 동시에 실행하는 데 불일치가 발생할 수 있습니다. 발생할 수 있는 불일치를 이해하려면 HBase가 클러스터의 노드에서 쓰기 작업을 분산시키는 것을 고려해야 합니다. 특정 노드가 폴링된 후 쓰기 작업이 발생하면 해당 데이터는 백업 아카이브에 포함되지 않습니다. 이미 폴링된 노드로 전송된 HBase 클러스터에 대한 이전 쓰기는 백업 아카이브에 없을 수 있으며 나중에 쓰기(폴링되기 전에 노드에 전송됨)가 포함됩니다.

이미 폴링된 노드로 전송된 HBase 클러스터에 대한 이전 쓰기는 백업 아카이브에 없을 수 있으며 나중에 쓰기(폴링되기 전에 노드에 전송됨)가 포함됩니다. 백업을 요청할 때 `--consistent` 파라미터를 지정하여 이 작업을 수행할 수 있습니다. 이 파라미터를 사용하면 이 기간 동안의 쓰기가 대기 상태가 되고 동기화가 완료되는 즉시 실행됩니다. 하나의 백업 단계에서 누락된 데이터가 다음 단계에서 백업되므로 시간 경과에 따른 불일치를 해결하는 반복 백업을 예약할 수도 있습니다.

HBase 데이터를 백업할 때 각 클러스터마다 다른 백업 디렉터리를 지정해야 합니다. 이를 수행하는 쉬운 방법은 클러스터 식별자를 백업 디렉터리에 지정된 경로의 일부로 사용하는 것입니다. 예를 들어 `s3://amzn-s3-demo-bucket/backups/j-3AEXXXXXX16F2`입니다. 이렇게 하면 향후 증분 백업이 올바른 HBase 클러스터를 참조하도록 보장할 수 있습니다.

더 이상 필요 없는 이전 백업 파일을 삭제할 준비가 되면 HBase 데이터의 전체 백업을 먼저 수행하는 것이 좋습니다. 이렇게 하면 모든 데이터가 보존되고 향후 증분 백업에 대한 기준이 제공됩니다. 전체 백업이 완료되면 백업 위치로 이동하여 수동으로 이전 백업 파일을 삭제할 수 있습니다.

HBase 백업 프로세스는 복사 작업에 S3DistCp를 사용합니다. 이 작업에는 임시 파일 스토리지 공간과 관련하여 특정 제한이 있습니다.

### 콘솔을 사용하여 HBase 백업 및 복원
<a name="emr-3x-hbase-backup-restore-console"></a>

콘솔은 새 클러스터를 시작하고 이전 HBase 백업의 데이터로 채울 수 있는 기능을 제공합니다. 또한 HBase 데이터를 주기적으로 증분 백업하도록 예약할 수 있습니다. 이미 실행 중인 클러스터로 데이터를 복원하고, 수동 백업을 수행하고, 자동화된 전체 백업을 예약하는 기능과 같은 추가 백업 및 복원 기능은 CLI를 통해 사용할 수 있습니다.

**콘솔을 사용하여 아카이브된 HBase 데이터로 새 클러스터를 채우려면**

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

1. **클러스터 생성**을 선택합니다.

1. **소프트웨어 구성** 섹션에서 **추가 애플리케이션**에 대해 **HBase** 및 **구성 및 추가**를 선택합니다.

1. **애플리케이션 추가** 대화 상자에서 **Restore From Backup(백업에서 복원)**을 선택합니다.

1. **백업 위치**에서 새 HBase 클러스터에 로드할 백업의 위치를 지정합니다. 이는 `s3://amzn-s3-demo-bucket/backups/` 양식의 Amazon S3 URL이어야 합니다.

1. **백업 버전**에 대해 값을 설정하여 로드할 백업 버전의 이름을 지정할 수 있습니다. **백업 버전**의 값을 설정하지 않을 경우 Amazon EMR이 지정된 위치에 최신 백업을 로드합니다.

1. **추가**를 선택하고 필요에 따라 다른 옵션으로 클러스터를 생성합니다.

**콘솔을 사용하여 HBase 데이터의 자동 백업을 예약하려면**

1. **소프트웨어 구성** 섹션에서 **추가 애플리케이션**에 대해 **HBase** 및 **구성 및 추가**를 선택합니다.

1. **정기 백업 예약**을 선택합니다.

1. 백업의 일관성 여부를 지정합니다. 일관된 백업은 초기 백업 단계, 즉 노드 간 동기화 중에 쓰기 작업을 일시 중지하는 백업입니다. 이렇게 일시 중지된 쓰기 작업은 대기열에 배치되고 동기화가 완료되면 다시 시작됩니다.

1. **백업 빈도**에 숫자를 입력하고 **일**, **시간** 또는 **분**을 선택하여 백업이 수행되는 빈도를 설정합니다. 실행되는 첫 번째 자동 백업은 전체 백업입니다. 그 후 Amazon EMR은 사용자가 지정한 일정에 따라 증분 백업을 저장합니다.

1. 백업이 저장되는 Amazon S3의 위치를 지정합니다. 증분 백업이 올바르게 계산되도록 하기 위해 각 HBase 클러스터를 Amazon S3의 별도 위치에 백업해야 합니다.

1. **백업 시작 시간**에 대한 값을 설정하여 첫 번째 백업이 발생해야 할 시점을 지정합니다. 클러스터가 실행되는 즉시 첫 번째 백업이 시작되도록 `now`로 설정하거나, [ISO 형식](http://www.w3.org/TR/NOTE-datetime)으로 날짜와 시간을 입력할 수 있습니다. 예를 들어, 2013-09-26T20:00Z는 시작 시간을 2013년 9월 26일 오후 8시(UTC)로 설정합니다.

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

1. 계속해서 필요에 따라 다른 옵션으로 클러스터를 생성합니다.

## CloudWatch를 이용한 HBase 모니터링
<a name="emr-3x-hbase-cloudwatch"></a>

Amazon EMR은 HBase 백업을 모니터링하는 데 사용할 수 있는 세 가지 지표를 CloudWatch에 보고합니다. 이러한 지표는 5분 간격으로 CloudWatch로 푸시되고, 무료로 제공됩니다.


| 지표 | 설명 | 
| --- | --- | 
| HBaseBackupFailed |  마지막 백업 실패 여부입니다. 이 값은 기본적으로 0으로 설정되고 이전 백업 시도가 실패하면 1로 업데이트됩니다. 이 지표는 HBase 클러스터에 대해서만 보고됩니다. 사용 사례: HBase 백업 모니터링 Units: *Count*  | 
| HBaseMostRecentBackupDuration |  이전 백업이 완료되는 데 걸린 시간입니다. 이 지표는 마지막으로 완료된 백업의 성공 여부에 관계없이 설정됩니다. 백업이 진행되는 동안 이 지표는 백업이 시작된 후의 시간(분)을 반환합니다. 이 지표는 HBase 클러스터에 대해서만 보고됩니다. 사용 사례: HBase 백업 모니터링 단위: *분*  | 
| HBaseTimeSinceLastSuccessfulBackup |  클러스터에서 마지막으로 성공한 HBase 백업이 시작된 후 경과된 시간 (분)입니다. 이 지표는 HBase 클러스터에 대해서만 보고됩니다. 사용 사례: HBase 백업 모니터링 단위: *분*  | 

## HBase용 Ganglia 구성
<a name="emr-3x-ganglia-for-hbase"></a>

**configure-hbase-for-ganglia** 부트스트랩 작업을 사용하여 HBase용 Ganglia를 구성합니다. 이 부트스트랩 작업은 HBase가 지표를 Ganglia에 게시하도록 구성합니다.

클러스터를 시작할 때 HBase와 Ganglia를 구성해야 합니다. 실행중인 클러스터에 Ganglia 보고를 추가할 수 없습니다.

또한 Ganglia는 `/mnt/var/log/ganglia/rrds`에서 서버에 로그 파일을 저장합니다. 로그 파일을 Amazon S3 버킷에 보관하도록 클러스터를 구성한 경우, Ganglia 로그 파일도 여기에 보관됩니다.

HBase용 Ganglia가 설치된 클러스터를 시작하려면 다음 예제에 표시된 대로 **configure-hbase-for-ganglia** 부트스트랩 작업을 사용합니다.

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia
```

Ganglia가 구성된 클러스터가 시작되면 마스터 노드에서 실행중인 그래픽 인터페이스를 사용하여 Ganglia 그래프와 보고서에 액세스할 수 있습니다.

# Amazon EMR의 이전 AMI 버전에 고유한 Pig 애플리케이션
<a name="emr-3x-pig"></a>

## 지원되는 Pig 버전
<a name="emr-3x-Pig_SupportedVersions"></a>

클러스터에 추가할 수 있는 Pig 버전은 사용하는 Amazon EMR AMI 버전 및 Hadoop 버전에 따라 다릅니다. 아래 표에서는 다양한 버전의 Pig와 호환되는 AMI 버전과 Hadoop 버전을 보여 줍니다. 사용 가능한 최신 버전의 Pig를 사용하여 성능 향상 및 새로운 기능을 활용하는 것이 좋습니다.

API를 사용하여 Pig를 설치할 때 [RunJobFlow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow.html)를 직접 호출하는 동안 클러스터에 Pig를 로드하는 단계의 인수로 `--pig-versions`를 지정하지 않으면 기본 버전이 사용됩니다.


| Pig 버전 | AMI 버전 | 구성 파라미터 | Pig 버전 세부 정보 | 
| --- | --- | --- | --- | 
| <a name="pig12"></a>0.12.0[릴리스 정보](http://pig.apache.org/releases.html#14+October%2C+2013%3A+release+0.12.0+available)[설명서](http://pig.apache.org/docs/r0.12.0/) | 3.1.0 이상 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3`  |  다음에 대한 지원을 추가합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-3x-pig.html)  | 
| <a name="pig1111"></a>0.11.1.1[릴리스 정보](http://pig.apache.org/releases.html#1+April%2C+2013%3A+release+0.11.1+available)[설명서](http://pig.apache.org/docs/r0.11.1/) | 2.2 이상 |  `--pig-versions 0.11.1.1` `--ami-version 2.2`  |  입력이 Amazon S3에 상주하는 경우 PigStorage에서 LOAD 명령의 성능을 개선합니다.  | 
| <a name="pig0111"></a>0.11.1[릴리스 정보](http://pig.apache.org/releases.html#1+April%2C+2013%3A+release+0.11.1+available)[설명서](http://pig.apache.org/docs/r0.11.1/) | 2.2 이상 |  `--pig-versions 0.11.1` `--ami-version 2.2`  |  JDK 7, Hadoop 2, Groovy 사용자 정의 함수, SchemaTuple 최적화, 새로운 연산자 등에 대한 지원을 추가합니다. 자세한 내용은 [Pig 0.11.1 change log](http://svn.apache.org/repos/asf/pig/tags/release-0.11.1/CHANGES.txt)를 참조하세요.  | 
| <a name="pig0922"></a>0.9.2.2[릴리스 정보](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[설명서](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 이상 |  `--pig-versions 0.9.2.2` `--ami-version 2.2`  |  Hadoop 1.0.3에 대한 지원을 추가합니다.  | 
| <a name="pig0921"></a>0.9.2.1[릴리스 정보](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[설명서](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 이상 |  `--pig-versions 0.9.2.1` `--ami-version 2.2`  |  MapR에 대한 지원을 추가합니다.  | 
| <a name="pig092"></a>0.9.2[릴리스 정보](http://pig.apache.org/releases.html#22+January%2C+2012%3A+release+0.9.2+available)[설명서](http://pig.apache.org/docs/r0.9.2/index.html) | 2.2 이상 |  `--pig-versions 0.9.2` `--ami-version 2.2`  |  여러 성능 향상과 버그 수정을 포함합니다. Pig 0.9.2 변경에 대한 전체 정보는 [Pig 0.9.2 change log](http://svn.apache.org/repos/asf/pig/tags/release-0.9.2/CHANGES.txt)를 참조하세요.  | 
| <a name="pig091"></a>0.9.1[릴리스 정보](http://pig.apache.org/releases.html#5+October%2C+2011%3A+release+0.9.1+available)[설명서](http://pig.apache.org/docs/r0.9.1/) | 2.0 |  `--pig-versions 0.9.1` `--ami-version 2.0`  | 
| <a name="pig06"></a>0.6[릴리스 정보](http://pig.apache.org/releases.html#1+March%2C+2010%3A+release+0.6.0+available) | 1.0 |  `--pig-versions 0.6` `--ami-version 1.0`  | 
| <a name="pig03"></a>0.3[릴리스 정보](http://pig.apache.org/releases.html#25+June%2C+2009%3A+release+0.3.0+available) | 1.0 |  `--pig-versions 0.3` `--ami-version 1.0`  | 

## Pig 버전 세부 정보
<a name="emr-pig-version-details"></a>

Amazon EMR은 추가 Amazon EMR 패치가 적용되어 있을 수 있는 특정 Pig 릴리스를 지원합니다. Amazon EMR 클러스터에서 어떤 버전의 Pig를 실행할지를 구성할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 [Apache Pig](emr-pig.md) 섹션을 참조하세요. 다음 섹션에서는 다양한 Pig 버전과 Amazon EMR에서 로드된 버전에 적용되는 패치를 설명합니다.

### Pig 패치
<a name="EnvironmentConfig_AMIPigPatches"></a>

이 섹션에서는 Amazon EMR에서 사용할 수 있는 Pig 버전에 적용되는 사용자 지정 패치를 설명합니다.

#### Pig 0.11.1.1 패치
<a name="EnvironmentConfig_AMIPigPatches-0.11.1.1"></a>

Amazon EMR의 Pig 0.11.1.1 버전은 입력이 Amazon S3에 상주하는 경우 PigStorage에서 LOAD 명령의 성능을 개선하는 유지 관리 릴리스입니다.

#### Pig 0.11.1 패치
<a name="EnvironmentConfig_AMIPigPatches-0.11.1"></a>

Amazon EMR 버전의 Pig 0.11.1에는 Apache Software Foundation에서 제공하는 모든 업데이트와 Pig 버전 0.9.2.2 이후의 누적 Amazon EMR 패치가 포함됩니다. 하지만 Pig 0.11.1에는 새로운 Amazon EMR용 패치가 없습니다.

#### Pig 0.9.2 패치
<a name="EnvironmentConfig_AMIPigPatches-0.9.2"></a>

Apache Pig 0.9.2는 Pig의 유지 관리 릴리스입니다. Amazon EMR 팀은 다음 패치를 Pig 0.9.2의 Amazon EMR 버전에 적용했습니다.


| 패치 | 설명 | 
| --- | --- | 
|  PIG-1429  |   부울 데이터 형식을 Pig에 첫 번째 클래스 데이터 형식으로 추가합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-1429](https://issues.apache.org/jira/browse/PIG-1429)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.10   | 
|  PIG-1824  |   Jython UDF에서 모듈 가져오기를 지원합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-1824](https://issues.apache.org/jira/browse/PIG-1824)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.10   | 
|  PIG-2010  |   분산 캐시에 등록된 JAR을 번들링합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-2010](https://issues.apache.org/jira/browse/PIG-2010)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.11   | 
|  PIG-2456  |   사용자가 기본 Pig 문을 지정할 수 있는 \$1/.pigbootup 파일을 추가합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-2456](https://issues.apache.org/jira/browse/PIG-2456)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.11   | 
|  PIG-2623  |   Amazon S3 경로를 사용하여 UDF를 등록하는 기능을 지원합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-2623](https://issues.apache.org/jira/browse/PIG-2623)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.10, 0.11   | 

#### Pig 0.9.1 패치
<a name="EnvironmentConfig_AMIPigPatches-0.9.1"></a>

Amazon EMR 팀은 다음 패치를 Pig 0.9.1의 Amazon EMR 버전에 적용했습니다.


| 패치 | 설명 | 
| --- | --- | 
|  dfs에서 JAR 파일 및 Pig 스크립트 지원  |   HDFS, Amazon S3 또는 기타 분산 파일 시스템에 저장된 스크립트 실행 및 JAR 파일 등록에 대한 지원을 추가했습니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-1505](https://issues.apache.org/jira/browse/PIG-1505)를 참조하세요.  **상태:** 커밋됨   **Apache Pig 버전에서 수정됨:** 0.8.0   | 
|  Pig에서 다중 파일 시스템 지원  |   한 파일 시스템에서 데이터를 읽고 다른 파일 시스템에 쓰는 Pig 스크립트에 대한 지원을 추가합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-1564](https://issues.apache.org/jira/browse/PIG-1564)를 참조하세요.  **상태:** 커밋 안 됨   **Apache Pig 버전에서 수정됨:** 해당 사항 없음   | 
|  Piggybank 날짜/시간 및 문자열 UDF 추가  |   사용자 지정 Pig 스크립트를 지원하기 위해 날짜/시간 및 문자열 UDF를 추가합니다. 자세한 내용은 [https://issues.apache.org/jira/browse/PIG-1565](https://issues.apache.org/jira/browse/PIG-1565)를 참조하세요.  **상태:** 커밋 안 됨   **Apache Pig 버전에서 수정됨:** 해당 사항 없음   | 

## 대화형 및 배치 Pig 클러스터
<a name="emr-3x-pig-interactive-batch"></a>

Amazon EMR을 사용하면 Pig 스크립트를 두 가지 모드로 실행할 수 있습니다.
+ 대화형
+ 배치

콘솔 또는를 사용하여 장기 실행 클러스터를 시작할 때를 사용하여 Hadoop 사용자로 마스터 노드**ssh**에 연결하고 Grunt 셸을 사용하여 대화형으로 Pig 스크립트를 개발하고 실행할 AWS CLI수 있습니다. Pig를 대화형으로 사용하면 배치 모드보다 더 쉽게 Pig 스크립트를 수정할 수 있습니다. 대화형 모드에서 Pig 스크립트를 수정한 후 스크립트를 Amazon S3에 업로드하고 배치 모드를 사용하여 프로덕션에서 스크립트를 실행할 수 있습니다. 또한 실행 중인 클러스터에서 대화형으로 Pig 명령을 제출하여 필요에 따라 분석하고 변환할 수 있습니다.

배치 모드에서 Pig 스크립트를 Amazon S3에 업로드한 다음, 작업을 클러스터에 하나의 단계로 제출합니다. 장기 실행 클러스터 또는 일시적 클러스터에 Pig 단계를 제출할 수 있습니다.

# Amazon EMR의 이전 AMI 버전에 고유한 Spark 애플리케이션
<a name="emr-3x-spark"></a>

## 대화식 또는 배치 모드로 Spark 사용
<a name="emr-3x-spark-interactive-batch"></a>

Amazon EMR에서는 두 가지 모드로 Spark 애플리케이션을 실행할 수 있습니다.
+ 대화형
+ 배치

콘솔 또는를 사용하여 장기 실행 클러스터를 시작할 때 SSH를 사용하여 Hadoop 사용자로 마스터 노드에 연결하고 Spark 셸을 사용하여 Spark 애플리케이션을 대화형으로 개발하고 실행할 AWS CLI수 있습니다. Spark를 대화식으로 사용하면 배치 환경에서 보다 더 쉽게 Spark 애플리케이션을 시제품화하거나 테스트할 수 있습니다. Spark 애플리케이션을 대화형 모드에서 수정한 후에는 해당 애플리케이션 JAR 또는 Python 프로그램을 Amazon S3에 있는 클러스터의 로컬 프라이머리 노드 파일 시스템에 추가할 수 있습니다. 그런 다음 이 애플리케이션을 배치 워크플로로 제출할 수 있습니다.

배치 모드에서는 Spark 스크립트를 Amazon S3 또는 로컬 프라이머리 노드 파일 시스템에 업로드한 다음, 작업을 클러스터에 하나의 단계로 제출합니다. 장기 실행 클러스터 또는 일시적 클러스터에 Spark 단계를 제출할 수 있습니다.

## Spark가 설치된 클러스터 생성
<a name="emr-3x-spark-install"></a>

**콘솔을 사용하여 Spark가 설치된 클러스터를 시작하려면**

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

1. **클러스터 생성**을 선택합니다.

1. **소프트웨어 구성**에서 필요한 AMI 릴리스 버전을 선택합니다.

1.  **설치할 애플리케이션**의 목록에서 **Spark**를 선택한 다음 **구성 및 추가**를 선택합니다.

1. 인수를 추가하여 원하는 대로 Spark 구성을 변경합니다. 자세한 내용은 [Spark 구성](#emr-3x-spark-configure) 단원을 참조하십시오. **추가**를 선택합니다.

1.  필요에 따라 다른 옵션을 선택한 다음 **클러스터 생성**을 선택합니다.

다음은 Java를 사용하여 Spark가 설치된 클러스터를 생성하는 방법을 보여주는 예제입니다.

```
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
SupportedProductConfig sparkConfig = new SupportedProductConfig()
			.withName("Spark");

RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("Spark Cluster")
			.withAmiVersion("3.11.0")
			.withNewSupportedProducts(sparkConfig)
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyName")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge")
			);			
RunJobFlowResult result = emr.runJobFlow(request);
```

## Spark 구성
<a name="emr-3x-spark-configure"></a>

클러스터를 생성할 때 [Github의 awslabs/emr-bootstrap-actions/spark 리포지토리](https://github.com/awslabs/emr-bootstrap-actions/tree/master/spark)에 있는 부트스트랩 작업을 실행하여 Spark를 구성합니다. 부트스트랩 작업이 허용하는 인수는 해당 리포지토리의 [README](https://github.com/aws-samples/emr-bootstrap-actions/blob/master/spark/examples/README.md)를 참조하세요. 부트스트랩 작업은 `$SPARK_CONF_DIR/spark-defaults.conf` 파일의 속성을 구성합니다. 설정에 대한 자세한 내용은 Spark 설명서의 Spark 구성 주제를 참조하세요. 다음 URL의 "latest"를 `2.2.0` [http://spark.apache.org/docs/latest/configuration.html](http://spark.apache.org/docs/latest/configuration.html)과 같이 설치하는 Spark 버전 번호로 대체할 수 있습니다.

또한 각 애플리케이션 제출 시 Spark를 동적으로 구성할 수 있습니다. `spark` 구성 파일을 사용하여 실행기에 대한 리소스 할당을 자동으로 최대화하는 설정을 사용할 수 있습니다. 자세한 내용은 [Spark 기본 구성 설정 재정의](#emr-3x-spark-dynamic-configuration) 단원을 참조하십시오.

### Spark 기본 설정 변경
<a name="emr-3x-spark-default-settings"></a>

다음은 AWS CLI를 사용하여 `spark.executor.memory`가 2G로 설정된 클러스터를 생성하는 방법을 보여주는 예입니다.

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

```
aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 \
--applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 --use-default-roles
```

### Spark에 작업 제출
<a name="emr-3x-spark-submit-work"></a>

작업을 클러스터로 제출하려면 단계를 사용하여 EMR 클러스터에서 `spark-submit` 스크립트를 실행합니다. [AmazonElasticMapReduceClient](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/AmazonElasticMapReduceClient.html)에서 `addJobFlowSteps` 메서드를 사용하여 단계를 추가합니다.

```
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
StepFactory stepFactory = new StepFactory();
AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
req.withJobFlowId("j-1K48XXXXXXHCB");

List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
		
StepConfig sparkStep = new StepConfig()
	.withName("Spark Step")
	.withActionOnFailure("CONTINUE")
	.withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10"));

stepConfigs.add(sparkStep);
req.withSteps(stepConfigs);
AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
```

### Spark 기본 구성 설정 재정의
<a name="emr-3x-spark-dynamic-configuration"></a>

애플리케이션마다 Spark 기본 구성 값을 재정의해야 할 때가 있습니다. 이 작업은 단계를 사용하여 애플리케이션을 제출할 때 기본적으로 옵션을 `spark-submit`에 전달함으로써 수행할 수 있습니다. 예를 들면 `spark.executor.memory`를 변경하여 실행자 프로세스에 할당된 메모리를 변경해야 할 때가 있습니다. 다음과 같은 인수를 사용하여 `--executor-memory` 스위치를 공급할 수 있습니다.

```
/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

마찬가지로, `--executor-cores` 및 `--driver-memory`를 조정할 수 있습니다. 단계에서 다음 인수를 단계에 제공합니다.

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

또한 `--conf` 옵션을 사용하여 기본 제공 스위치가 없는 설정을 조정할 수도 있습니다. 조정 가능한 다양한 설정에 대한 자세한 내용은 Apache Spark 설명서의 [Dynamically Loading Spark Properties](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties) 주제를 참조하세요.

# Amazon EMR의 이전 AMI 버전에서 S3DistCp 유틸리티 차이
<a name="emr-3x-s3distcp"></a>

## Amazon EMR에서 지원되는 S3DistCp 버전
<a name="emr-s3distcp-verisons"></a>

Amazon EMR AMI 릴리스에서 다음 S3DistCp 버전이 지원됩니다. 1.0.7 이후 S3DistCp 버전은 클러스터에 있습니다. 최신 기능을 사용하려면 `/home/hadoop/lib`의 JAR을 사용하세요.


| 버전 | 설명 | 릴리스 날짜 | 
| --- | --- | --- | 
| 1.0.8 | --appendToLastFile, --requirePreviousManifest 및 --storageClass 옵션을 추가합니다. | 2014년 1월 3일 | 
| 1.0.7 | --s3ServerSideEncryption 옵션을 추가합니다. | 2013년 5월 2일 | 
| 1.0.6 | --s3Endpoint 옵션을 추가합니다. | 2012년 8월 6일 | 
| 1.0.5 | 실행할 S3DistCp 버전을 지정하는 기능을 개선했습니다. | 2012년 6월 27일 | 
| 1.0.4 | --deleteOnSuccess 옵션을 개선했습니다. | 2012년 6월 19일 | 
| 1.0.3 | --numberFiles 및 --startingIndex 옵션에 대한 지원을 추가했습니다. | 2012년 6월 12일 | 
| 1.0.2 | 그룹 사용 시 파일 명명을 개선했습니다. | 2012년 6월 6일 | 
| 1.0.1 | S3DistCp의 초기 릴리스. | 2012년 1월 19일 | 

## 클러스터에 S3DistCp 복사 단계 추가
<a name="emr-3x-s3distcp-add-step"></a>

S3DistCp 복사 단계를 실행 중인 클러스터에 추가하려면 다음 명령을 입력하고 *j-3GYXXXXXX9IOK*를 클러스터 ID로 바꾸고, *amzn-s3-demo-bucket*을 Amazon S3 버킷 이름으로 바꿉니다.

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

```
aws emr add-steps --cluster-id j-3GYXXXXXX9IOK \
--steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emr-s3distcp-1.0.jar,\
Args=["--s3Endpoint,s3-eu-west-1.amazonaws.com",\
"--src,s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/",\
"--dest,hdfs:///output",\
"--srcPattern,.*[a-zA-Z,]+"]
```

**Example Amazon CloudFront 로그를 HDFS에 로드**  
이 예제에서는 실행 중인 클러스터에 단계를 추가하여 Amazon CloudFront 로그를 HDFS에 로드합니다. 프로세스에서 Gzip(CloudFront 기본값)의 압축 형식을 LZO로 변경합니다. 이렇게 하면 LZO를 사용하여 압축된 데이터를 압축 해제 시 여러 맵으로 분할할 수 있으므로 Gzip 사용 시 압축이 완료될 때까지 기다릴 필요가 없어서 유용합니다. 따라서 Amazon EMR을 사용하여 데이터를 분석할 때 성능이 향상됩니다. 또한 이 예제는 `--groupBy` 옵션에 지정된 정규식을 사용하여 주어진 시간 동안 모든 로그를 단일 파일로 결합하여 성능을 개선합니다. Amazon EMR 클러스터는 여러 개의 작은 GZIP 압축 파일을 처리할 때보다 LZO로 압축된 소수의 대용량 파일을 처리할 때 더 효율적입니다. LZO 파일을 분할하려면 파일을 인덱싱하고 Hadoop-lzo 타사 라이브러리를 사용해야 합니다.  
Amazon CloudFront 로그를 HDFS에 로드하려면 다음 명령을 입력하고 *j-3GYXXXXXX9IOK*를 클러스터 ID로 바꾸고, *amzn-s3-demo-bucket*을 Amazon S3 버킷 이름으로 바꿉니다.  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

```
aws emr add-steps --cluster-id j-3GYXXXXXX9IOK \
--steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emr-s3distcp-1.0.jar,\
Args=["--src,s3://amzn-s3-demo-bucket/cf","--dest,hdfs:///local",\
"--groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*",\
"--targetSize,128",
"--outputCodec,lzo","--deleteOnSuccess"]
```
이전 예제를 다음과 같은 CloudFront 로그 파일에서 실행한다고 가정합니다.  

```
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-01.HLUS3JKx.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-01.I9CNAZrg.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.YRRwERSA.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.dshVLXFE.gz
s3://amzn-s3-demo-bucket/cf/XABCD12345678.2012-02-23-02.LpLfuShd.gz
```
S3DistCp는 파일을 복사 및 연결하고 다음 두 개 파일로 압축합니다. 이때 파일 이름은 정규식과 일치하는 항목에 따라 결정됩니다.  

```
hdfs:///local/2012-02-23-01.lzo
hdfs:///local/2012-02-23-02.lzo
```