Я запускал кластер AWS ERM с использованием Java SDK (ниже приведен фрагмент кода), который прекрасно работал.
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKeyId, secretAccessKeyId);
AmazonElasticMapReduce emrClient = AmazonElasticMapReduceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(region)
.build();
JobFlowInstancesConfig jobFlowInstanceConfig = new JobFlowInstancesConfig()
.withEc2SubnetId("subnetId")
.withEc2KeyName("ec2KeyName")
.withInstanceCount(3)
.withKeepJobFlowAliveWhenNoSteps(true)
.withMasterInstanceType(c5.4xlarge)
.withSlaveInstanceType(c5.4xlarge);
// create the cluster
RunJobFlowRequest request = new RunJobFlowRequest()
.withName("clusterName")
.withReleaseLabel("emr-5.23.0")
.withApplications("<Added following in applications Hadoop,Spark,Ganglia,Zeppelin>")
.withLogUri("s3 path")
.withServiceRole("EMR_DefaultRole")
.withJobFlowRole("EMR_EC2_DefaultRole")
.withInstances(jobFlowInstanceConfig);
RunJobFlowResult runJobFlowResult = emrClient.runJobFlow(request);
Позже в другой среде AWS наша команда AWS создала роль длясоздать кластер из конкретного экземпляра EC2. Но я не могу создать кластер. Ниже приведен фрагмент кода с дополнительной конфигурацией и изменениями, которые я заметил в отношении моей предыдущей конфигурации.
- Нет accessKeyId и secretAccessKeyId
- EMR_EC2_DefaultRole изменяется на настроенную роль
Конфигурация безопасности была добавлена
AmazonElasticMapReduce emrClient = AmazonElasticMapReduceClientBuilder.standard()
.withRegion(region)
.build();
JobFlowInstancesConfig jobFlowInstanceConfig = new JobFlowInstancesConfig()
.withEc2SubnetId("subnetId")
.withEc2KeyName("ec2KeyName")
.withInstanceCount(3)
.withKeepJobFlowAliveWhenNoSteps(true)
.withMasterInstanceType(c5.4xlarge)
.withSlaveInstanceType(c5.4xlarge);
RunJobFlowRequest request = new RunJobFlowRequest()
.withName("clusterName")
.withReleaseLabel("emr-5.23.0")
.withApplications("<Added following in applications Hadoop,Spark,Ganglia,Zeppelin>")
.withLogUri("s3 path")
.withServiceRole("EMR_DefaultRole")
.withJobFlowRole("name-of-role-created")
.withInstances(jobFlowInstanceConfig)
.withSecurityConfiguration("Security configuration Name");
RunJobFlowResult runJobFlowResult = emrClient.runJobFlow(request);
Я получаю следующую ошибку:
com.amazonaws.services.elasticmapreduce.model.AmazonElasticMapReduceException: Role '' is not well-formed. (Service: AmazonElasticMapReduce; Status Code: 400; Error Code: ValidationException; Request ID: 0d5ed77e-ed0e-49fd-bd33-f88213ce08c3)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1701)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1356)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1102)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:759)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:733)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:715)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:675)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:657)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:521)
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.doInvoke(AmazonElasticMapReduceClient.java:2043)
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.invoke(AmazonElasticMapReduceClient.java:2010)
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.invoke(AmazonElasticMapReduceClient.java:1999)
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.executeRunJobFlow(AmazonElasticMapReduceClient.java:1770)
at com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.runJobFlow(AmazonElasticMapReduceClient.java:1742)
Поскольку вышеупомянутая ошибка говорит, что роль не отформатирована должным образом, япробовал с разными форматами, но все равно получил ту же проблему. Ниже приведены различные форматы, которые я добавил в .withJobFlowRole («имя-роли-созданного»)
arn:aws:iam::639116131780:role/name-of-role-created
arn:aws:iam::639116131780:instance-profile/name-of-role-created
arn:aws:iam::639116131780:role/name-of-role-created/*
arn:aws:iam::639116131780:instance-profile/name-of-role-created/*
arn:aws:sts::639116131780:assumed-role/name-of-role-created
arn:aws:sts::639116131780:assumed-role/name-of-role-created/*
Я получаю одну и ту же ошибку каждый раз.
com.amazonaws.services.elasticmapreduce.model.AmazonElasticMapReduceException: Role 'arn:aws:iam::639116131780:role/name-of-role-created' is not well-formed. (Service: AmazonElasticMapReduce; Status Code: 400; Error Code: ValidationException; Request ID: 0d5ed77e-ed0e-49fd-bd33-f88213ce08c3)