2016-11-26 1 views
0

AWS用のJava SDKを使用して小さなEMRクラスターを起動しようとしています。私はフランクフルト(eu-central-1)でそれを打ち出そうと努力しているが、悲惨に失敗しているが、N. Virginia(us-east-1)で打ち上げ成功している。フランクフルトでAWS-EMRクラスターを起動できませんでしたが、N. Virginiaで成功

マイ設定:

  • のMacOS 10.12.1
  • のJava 1.8.102
  • AWS SDK用のJava 1.11.60
  • のHadoop 2.7.3
  • IntelliJの2016年2月4日

私はすでに以下を確認しています:

  1. 私が要求しているインスタンスタイプ(M1Medium)は両方のリージョンに存在します。
  2. クラスタ(2.7.3)に要求しているHadoopバージョンは、EMRバージョン(5.2.0)に存在するものです。
  3. 私はクラスタをサポートするために適切なIAM Roles(デフォルトのもの - EMR_EC2_DefaultRole & EMR_DefaultRole)を持っています。これらは明らかにN. Virginiaでクラスタを起動するために正しく動作します。
  4. 私は両方の地域でEC2キーペアを持っています。
  5. EMRが両方の地域でサービスとして利用可能であることを確認しました。
  6. 私は両方の地域で正しい空き領域が使用されていることを確認しました。また、これらのゾーンはWebブラウザのEC2ダッシュボードを介して健全です。
  7. クラスタの試行ごとに、入力、出力、およびEMRログに同じ領域のS3バケットを使用しています。

これはフランクフルトでクラスタを起動するためのコードです:N.バージニア州で起動すると

public static void main(String[] args) throws Exception { 
    parseArgs(args); 

    if (environment.equals("local")) { 
     // Local machine, single node setup. Used in order to debug the M-R logic. 
     String[] p1args = {"input", "output", environment}; 
     Phase1.main(p1args); 
    } else { 
     // EMR setup. This is the main intent of this app. 
     AWSCredentials credentials = null; 
     try { 
      credentials = new ProfileCredentialsProvider().getCredentials(); 
     } catch (Exception e) { 
      throw new AmazonClientException(
        "Cannot load the credentials from the credential profiles file. " + 
          "Please make sure that your credentials file is at the correct " + 
          "location (~/.aws/credentials), and is in valid format.", 
        e); 
     } 

     AmazonElasticMapReduce mapReduce = new AmazonElasticMapReduceClient(credentials); 

     HadoopJarStepConfig jarStep1 = new HadoopJarStepConfig() 
       .withJar("s3n://skill-finder-eu-central-1/jars/SkillFinder.jar") 
       .withMainClass("Phase1") 
       .withArgs("s3n://skill-finder-eu-central-1/input-10K", "s3n://skill-finder-eu-central-1/output-eu-central-1", environment); 

     StepConfig step1Config = new StepConfig() 
       .withName("Phase 1") 
       .withHadoopJarStep(jarStep1) 
       .withActionOnFailure("TERMINATE_JOB_FLOW"); 

     JobFlowInstancesConfig instances = new JobFlowInstancesConfig() 
       .withInstanceCount(5) 
       .withMasterInstanceType(InstanceType.M1Medium.toString()) 
       .withSlaveInstanceType(InstanceType.M1Medium.toString()) 
       .withHadoopVersion("2.7.3") 
       .withEc2KeyName("AWS-EU-CENTRAL-1") 
       .withKeepJobFlowAliveWhenNoSteps(false) 
       .withPlacement(new PlacementType("eu-central-1a")); 

     RunJobFlowRequest runFlowRequest = new RunJobFlowRequest() 
       .withName("skill-finder") 
       .withInstances(instances) 
       .withSteps(step1Config) 
       .withJobFlowRole("EMR_EC2_DefaultRole") 
       .withServiceRole("EMR_DefaultRole") 
       .withReleaseLabel("emr-5.2.0") 
       .withLogUri("s3n://skill-finder-eu-central-1/logs/") 
       .withBootstrapActions(); 

     System.out.println("Submitting the JobFlow Request to Amazon EMR and running it..."); 
     RunJobFlowResult runJobFlowResult = mapReduce.runJobFlow(runFlowRequest); 
     String jobFlowId = runJobFlowResult.getJobFlowId(); 
     System.out.println("Ran job flow with id: " + jobFlowId); 
    } 

} 

、私はちょうどus-east-1eu-central-1を交換してください。

これは例外である:

Exception in thread "main" com.amazonaws.services.elasticmapreduce.model.AmazonElasticMapReduceException: Specified Availability Zone is not supported. (Service: AmazonElasticMapReduce; Status Code: 400; Error Code: ValidationException; Request ID: 578db9ad-b3bf-11e6-9a57-5179acb16d3f) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1545) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1183) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:964) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:676) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:650) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:633) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300(AmazonHttpClient.java:601) 
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:583) 
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:447) 
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.doInvoke(AmazonElasticMapReduceClient.java:1469) 
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.invoke(AmazonElasticMapReduceClient.java:1445) 
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.runJobFlow(AmazonElasticMapReduceClient.java:1255) 
at MRTaskLauncher.main(MRTaskLauncher.java:97) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
+0

あなたは.aws/credentialsで指定された地域を持っていますか? – Gonfva

+0

いいえ、 '[default]'の下に単一のアクセスキーと秘密のアクセスキーがあります。 – asafc

+0

mapReduceインスタンス化の後に 'mapReduce.setEndpoint(" https://elasticmapreduce.eu-central-1.amazonaws.com ");を追加してテストできますか? (テストされていない) – Gonfva

答えて

0

OKは、解決策を見つけた:私はM3Xlargeインスタンスの代わりM2Mediumでクラスタを開始しました。魅力的な作品!

私はこれに着いどのよう

  1. 私はEMRのデフォルトIAMロールをN.バージニア州でクラスタを起動するために管理するので、私は、認証に問題があることを考えるようになりました。これは、フランクフルトでCLIを使用してクラスタを起動したときにさらにサポートされました(hereの例:Create and Use IAM Roles with the AWS CLI)。
  2. 次は、SDKを介してクラスタを再起動しようとしました。クラスタは失敗しましたが、起動コマンドをコピーしてCLIで起動できました。これを行うには、私はをクリックしてから、最上列のボタンAWS CLI exportをクリックして、EMRクラスターリスト(Webインターフェース)のクラスターをクリックしました。
  3. 私の驚きは、CLIは、(Webインターフェイスと比較して、検証エラーを列挙した)より具体的なエラーメッセージを提供しました。これは、原因がインスタンスの種類であることを示しました。次に、hereをチェックして、フランクフルトでどのインスタンスが利用可能であるかを調べ、VPCを必要としないインスタンス(M4が必要)を選択しました。
  4. プレリュードのビット - 記載されている検証エラーにより、thisが見つかりました。この質問が私にデフォルトのIAMの役割の問題を研究し、CLIを試してみるようになったのです。
関連する問題