

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

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