Amazon EMR의 이전 AMI 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정 - Amazon EMR

Amazon EMR의 이전 AMI 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정

Amazon EMR 릴리스 버전 4.0.0에서는 구성 분류를 사용하여 애플리케이션을 구성하는 간단한 방법이 도입되었습니다. 자세한 내용은 애플리케이션 구성 섹션을 참조하세요. AMI 버전을 사용할 때 전달하는 인수와 함께 부트스트랩 작업을 사용하여 애플리케이션을 구성합니다. 예를 들어, configure-hadoopconfigure-daemons 부트스트랩 작업은 Hadoop 및 Yarn별 환경 속성(예: --namenode-heap-size)을 설정합니다. 최신 버전에서는 이러한 사항이 hadoop-envyarn-env 구성 분류를 통해 구성됩니다. 일반적인 구성을 수행하는 부트스트랩 작업은 Github의 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 ${MY_HIVE_SITE_FILE} 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 지원)

모든 분류 목록을 보려면 애플리케이션 구성 단원을 참조하십시오.

애플리케이션 환경 변수

AMI 버전을 사용할 때 하둡 환경을 구성하기 위해 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/의 래퍼 스크립트는 실제 빈 스크립트를 포함하기 전에 추가 환경 변수를 설정할 수 있습니다.

서비스 포트

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 기본값(${yarn.nodemanager.hostname}:0)
yarn.nodemanager.localizer.address 0.0.0.0:9033 기본값(${yarn.nodemanager.hostname}:8040)
yarn.nodemanager.webapp.address 0.0.0.0:9035 기본값(${yarn.nodemanager.hostname}:8042)
yarn.resourcemanager.address emrDeterminedIP:9022 기본값(${yarn.resourcemanager.hostname}:8032)
yarn.resourcemanager.admin.address emrDeterminedIP:9025 기본값(${yarn.resourcemanager.hostname}:8033)
yarn.resourcemanager.resource-tracker.address emrDeterminedIP:9023 기본값(${yarn.resourcemanager.hostname}:8031)
yarn.resourcemanager.scheduler.address emrDeterminedIP:9024 기본값(${yarn.resourcemanager.hostname}:8030)
yarn.resourcemanager.webapp.address 0.0.0.0:9026 기본값(${yarn.resourcemanager.hostname}:8088)
yarn.web-proxy.address emrDeterminedIP:9046 기본값(값 지정 안 함)
yarn.resourcemanager.hostname 0.0.0.0(기본값) emrDeterminedIP
참고

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

사용자

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

설치 시퀀스, 설치된 아티팩트 및 로그 파일 위치

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
하둡 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

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

복제 인수

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

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

참고

2.x 및 3.x AMI 버전 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"]