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日
私はすでに以下を確認しています:
- 私が要求しているインスタンスタイプ(
M1Medium
)は両方のリージョンに存在します。 - クラスタ(2.7.3)に要求しているHadoopバージョンは、EMRバージョン(5.2.0)に存在するものです。
- 私はクラスタをサポートするために適切な
IAM Roles
(デフォルトのもの -EMR_EC2_DefaultRole
&EMR_DefaultRole
)を持っています。これらは明らかにN. Virginiaでクラスタを起動するために正しく動作します。 - 私は両方の地域でEC2キーペアを持っています。
- EMRが両方の地域でサービスとして利用可能であることを確認しました。
- 私は両方の地域で正しい空き領域が使用されていることを確認しました。また、これらのゾーンはWebブラウザのEC2ダッシュボードを介して健全です。
- クラスタの試行ごとに、入力、出力、および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-1
でeu-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)
あなたは.aws/credentialsで指定された地域を持っていますか? – Gonfva
いいえ、 '[default]'の下に単一のアクセスキーと秘密のアクセスキーがあります。 – asafc
mapReduceインスタンス化の後に 'mapReduce.setEndpoint(" https://elasticmapreduce.eu-central-1.amazonaws.com ");を追加してテストできますか? (テストされていない) – Gonfva