Amazon EMR クラスターオペレーション中の VPC エラー - Amazon EMR

Amazon EMR クラスターオペレーション中の VPC エラー

Amazon EMR の VPC 設定で一般的なエラーは次のとおりです。

無効なサブネット設定

[Cluster Details] ページの [Status] フィールドに、次のようなエラーが表示されます。

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

この問題を解決するには、インターネットゲートウェイを作成し、VPC に接続する必要があります。詳細については、「インターネットゲートウェイを VPC に追加する」を参照してください。

または、[Enable DNS resolution] および [Enable DNS hostname support] を有効にした状態で、VPC を設定したことを検証します。詳細については、「Using DNS with Your VPC」を参照してください。

不明な 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.

または

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 (米国西部) リージョンを使用する場合、domain-name は次の例で使用されている値ではなく、us-gov-west-1.compute.internal に設定してください。

  • 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 ログ内のエラーは、Simple Storage Service (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 内で Simple Storage Service (Amazon S3) バケットポリシーを使用している場合、すべてのバケットへのアクセスを許可する必要があります。このためには、VPC エンドポイントを作成し、その作成時に [ポリシー] オプションの下で [Allow all] (すべて許可) を選択します。

  • 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.tld のようにカスタムドメインアドレスでマッピングします。例えば、ホスト名が ip-10.0.0.10 で、VPC のドメイン名オプションが customdomain.com に設定されている場合、Amazon EMR でマッピングされたホスト名は ip-10.0.1.0.customdomain.com になります。エントリは /etc/hosts に追加され、ホスト名を解決して 10.0.0.10 にします。この動作は AMI 3.7.0 で変更され、Amazon EMR は VPC の DHCP 設定を全面的に優先するようになりました。以前は、お客様は、ホスト名のマッピングを指定するブートストラップアクションも使用できました。

この動作を維持するには、DNS を提供し、カスタムドメインに必要な解決セットアップを転送する必要があります。

クラスターが Terminated with errors になり、NameNode が起動に失敗する

カスタム DNS ドメイン名を使用する VPC で EMR クラスターを起動すると、コンソールに次のエラーメッセージが表示されてクラスターで障害が発生することがあります。

Terminated with errors On the master instance(instance-id), bootstrap action 1 returned a non-zero return code

障害は、NameNode が起動できないために発生します。これにより、NameNode ログに次のエラーが記録されます。このログの Simple Storage Service (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)

これは、AWS が提供する DNS サーバーとカスタムユーザーが提供する DNS サーバーの両方を利用する VPC で EMR クラスターを起動するときに、EC2 インスタンスに完全修飾ドメイン名のセットが複数存在する可能性があるという潜在的な問題が原因です。ユーザーが提供する DNS サーバーが、EMR クラスターでノードの指定に使用される A レコードのポインター(PTR)レコードを提供しない場合、この方法で設定するとクラスターが起動に失敗します。解決策として、EC2 インスタンスが VPC 内のいずれかのサブネットで起動されるときに作成される A レコードにごとに PTR レコードを 1 つ追加できます。