기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EMR 클러스터 작업 중 VPC 오류
다음은 Amazon EMR에서 VPC 구성과 관련하여 일반적으로 발생하는 오류입니다.
잘못된 서브넷 구성
클러스터 세부 정보 페이지의 상태 필드에는 다음과 비슷한 오류가 표시됩니다.
The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable
rtb-id
for vpc vpc-id
.
이 문제를 해결하려면 인터넷 게이트웨이를 생성하여 VPC에 연결해야 합니다. 자세한 내용은 VPC에 인터넷 게이트웨이 추가 단원을 참조하세요.
또는 Enable DNS resolution(DNS 확인 활성화) 및 Enable DNS hostname support(DNS 호스트 이름 지원 활성화)가 활성화된 상태로 VPC를 구성했는지 확인합니다. 자세한 내용은 VPC에서 DNS 사용하기 단원을 참조하세요.
DHCP 옵션 세트 누락
클러스터 시스템 로그(syslog)에 다음과 유사한 오류와 함께 단계 실패가 표시됩니다.
ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
or
ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id '
application_id
' doesn't exist in RM.
이 문제를 해결하려면 파라미터가 다음 값으로 설정된 DHCP 옵션 세트를 포함하는 VPC를 구성해야 합니다.
참고
AWS GovCloud(미국 서부) 리전을 사용하는 경우 다음 예제에서 사용된 값 us-gov-west-1.compute.internal
대신 domain-name을 로 설정합니다.
-
domain-name =
ec2.internal
리전이 미국 동부(버지니아 북부)인 경우
ec2.internal
을 사용합니다. 다른 리전의 경우region-name
.compute.internal
을 사용합니다. 예를 들어 us-west-2에서 domain-name=us-west-2.compute.internal
을 사용합니다. -
domain-name-servers =
AmazonProvidedDNS
자세한 내용은 DHCP 옵션 세트 단원을 참조하십시오.
권한 오류
stderr
로그에 표시되는 단계 오류는 Amazon S3 리소스에 적절한 권한이 없음을 의미합니다. 이 오류는 403 오류로, 다음과 비슷합니다.
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:
REQUEST_ID
ActionOnFailure가 TERMINATE_JOB_FLOW
로 설정된 경우 클러스터가 SHUTDOWN_COMPLETED_WITH_ERRORS
상태로 종료됩니다.
이 문제를 해결하는 몇 가지 방법은 다음과 같습니다.
-
VPC 내에서 Amazon S3 버킷 정책을 사용하려는 경우 VPC 엔드포인트를 생성하고 엔드포인트 생성 시 정책 옵션에서 모두 허용을 선택하여 모든 버킷에 액세스 권한을 부여해야 합니다.
-
S3 리소스와 연결된 모든 정책에 클러스터를 시작할 VPC를 포함해야 합니다.
-
클러스터에서 다음 명령을 실행하여 버킷에 액세스할 수 있는 확인합니다.
hadoop fs -copyToLocal s3://
path-to-bucket
/tmp/ -
클러스터의
log4j.logger.org.apache.http.wire
파일에서DEBUG
파라미터를/home/hadoop/conf/log4j.properties
로 설정하여 자세한 디버깅 정보를 가져올 수 있습니다. 클러스터에서 버킷에 대한 액세스를 시도한 후stderr
로그 파일을 확인할 수 있습니다. 로그 파일은 자세한 정보를 제공합니다.Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/ 15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount%2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]" 15/03/25 23:46:20 DEBUG http.wire: >> "Host: us-west-2.elasticmapreduce.s3.amazonaws.com[\r][\n]"
START_FAILED
를 발생시키는 오류
AMI 3.7.0 이전에는 호스트 이름에 지정되어 있는 VPC의 경우, Amazon EMR이 서브넷의 내부 호스트 이름을 사용자 지정 도메인 주소와 매핑합니다(예: ip-
). 예를 들어, 호스트 이름이 X.X.X.X.customdomain.com
.tldip-10.0.0.10
이고 VPC에 customdomain.com으로 설정된 도메인 이름 옵션이 있는 경우 Amazon EMR에 의해 매핑되는 결과 호스트 이름은 ip-10.0.1.0.customdomain.com
입니다. 호스트 이름을 10.0.0.10으로 확인하는 항목이 /etc/hosts
에 추가됩니다. 이 동작은 AMI 3.7.0에서 변경되었으며 이제는 Amazon EMR이 VPC의 DHCP 구성 전체를 인식합니다. 이전에는 고객이 부트스트랩 작업을 사용하여 호스트 이름 매핑을 지정할 수도 있었습니다.
이 동작을 유지하려면 DNS를 제공하고 사용자 지정 도메인에 필요한 확인 설정을 전달해야 합니다.
클러스터 Terminated with
errors
및 NameNode 시작 실패
사용자 지정 DNS 도메인 이름을 사용하는 EMR 클러스터를 VPC에서 시작하려는 경우 해당 클러스터가 실패하고 콘솔에 다음과 같은 오류 메시지가 표시될 수 있습니다.
Terminated with errors On the master instance(
instance-id
), bootstrap action 1 returned a non-zero return code
이 실패는 NameNode를 시작할 수 없어서 발생한 것입니다. 따라서 NameNode 로그에 다음과 같은 오류가 표시되며, 이때 Amazon S3 URI 양식은 s3://
입니다.amzn-s3-demo-bucket
/logs
/cluster-id
/daemons/master instance-id
/hadoop-hadoop-namenode-master node hostname
.log.gz
2015-07-23 20:17:06,266 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (main): Encountered exception loading fsimage java.io.IOException: NameNode is not formatted. at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739) at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:537) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:596) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:765) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:749) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
이 오류는 VPC에서 EMR 클러스터 시작 시 EC2 인스턴스 하나에 정규화된 도메인 이름의 여러 세트가 사용되는 경우에 발생할 수 있는 잠재적인 문제로, 이 경우 AWS제공 DNS 서버와 사용자 지정 사용자 제공 DNS 서버가 둘 다 사용됩니다. EMR 클러스터에서 노드를 지정하는 데 사용되는 A 레코드에 대한 포인터(PTR) 레코드를 사용자 제공 DNS 서버에서 제공하지 않는 경우, 이 방식으로 구성하면 클러스터가 시작되지 않습니다. 해결 방법은 EC2 인스턴스가 VPC의 서브넷에서 시작될 때 생성되는 모든 A 레코드에 대해 PTR 레코드 1개를 추가해야 합니다.