

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

# Amazon EMR 클러스터 작업 중 VPC 오류
<a name="emr-troubleshoot-error-vpc"></a>

다음은 Amazon EMR에서 VPC 구성과 관련하여 일반적으로 발생하는 오류입니다.

**Topics**
+ [

## 잘못된 서브넷 구성
](#emr-troubleshoot-error-gateway)
+ [

## DHCP 옵션 세트 누락
](#emr-troubleshoot-error-dhcp)
+ [

## 권한 오류
](#emr-troubleshoot-error-denied)
+ [

## `START_FAILED`를 발생시키는 오류
](#emr-troubleshoot-error-vpc-dns)
+ [

## 클러스터 `Terminated with errors` 및 NameNode 시작 실패
](#emr-troubleshoot-namenode-dns)

## 잘못된 서브넷 구성
<a name="emr-troubleshoot-error-gateway"></a>

 **클러스터 세부 정보** 페이지의 **상태** 필드에는 다음과 비슷한 오류가 표시됩니다.

`The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable rtb-id for vpc vpc-id.`

이 문제를 해결하려면 인터넷 게이트웨이를 생성하여 VPC에 연결해야 합니다. 자세한 내용은 [VPC에 인터넷 게이트웨이 추가](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html) 섹션을 참조하세요.

또는 **Enable DNS resolution**(DNS 확인 활성화) 및 **Enable DNS hostname support**(DNS 호스트 이름 지원 활성화)가 활성화된 상태로 VPC를 구성했는지 확인합니다. 자세한 내용은 [VPC에서 DNS 사용하기](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html) 섹션을 참조하세요.

## DHCP 옵션 세트 누락
<a name="emr-troubleshoot-error-dhcp"></a>

클러스터 시스템 로그(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. `

또는 

`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 옵션 세트](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html) 섹션을 참조하세요.

## 권한 오류
<a name="emr-troubleshoot-error-denied"></a>

`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`를 발생시키는 오류
<a name="emr-troubleshoot-error-vpc-dns"></a>

AMI 3.7.0 이전에는 호스트 이름에 지정되어 있는 VPC의 경우, Amazon EMR이 서브넷의 내부 호스트 이름을 사용자 지정 도메인 주소와 매핑합니다(예: `ip-X.X.X.X.customdomain.com.tld`). 예를 들어, 호스트 이름이 `ip-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 시작 실패
<a name="emr-troubleshoot-namenode-dns"></a>

사용자 지정 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개를 추가해야 합니다.