Не удалось опубликовать в CloudWatch: Ошибка при запуске child: java.lang.NoSuchMethodError:
Я пытаюсь отправить сообщение в Cloudwatch с моей работы EMR, но получаю сообщение об ошибке от stderr:
Ошибка: com.amazonaws.auth.DefaultAWSCredentialsProviderChain.getInstance()Lcom/amazonaws/auth/DefaultAWSCredentialsProviderChain; Контейнер убит ApplicationMaster. Контейнер убит по запросу. Код выхода 143 Контейнер завершен с ненулевым кодом выхода 143
и из системного журнала:
2017-06-20 16: 58: 23,078 FATAL [main] org.apache.hadoop.mapred.YarnChild: Ошибка при запуске дочернего объекта: java.lang.NoSuchMethodError: com.amazonaws.auth.DefaultAWSCredentialsProviderChain.getInstance()Lcom/amazonaws/ / DefaultAWSCredentialsProviderChain; по адресу com.amazonaws.client.builder.AwsClientBuilder.resolveCredentials(AwsClientBuilder.java:125) по адресу com.amazonaws.client.builder.AwsClientBuilder.access$100(AwsClientBuilder.javaswilder.wilder.wilder.wilder. SyncBuilderParams.(AwsClientBuilder.java:412) по адресу com.amazonaws.client.builder.AwsClientBuilder.getSyncClientParams(AwsClientBuilder.java:354) по адресу com.amazonaws.client.wilb. очистка (MapJoltSpec.java:186) в org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:149) в org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:796) в org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) в org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) в java.security.AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java:422) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) в org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Я прикрепил роль CloudWatchFullAccess к экземплярам EC2 и добавил в pom.xml:
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.151</version>
</dependency>
Наконец, вот мой код, который пытается опубликовать в методе очистки моей работы mapreduce:
final AmazonCloudWatch cw =
AmazonCloudWatchClientBuilder.defaultClient();
Dimension dimension = new Dimension()
.withName("POST_COUNT")
.withValue("SUCCESFUL_POST_COUNT");
MetricDatum datum = new MetricDatum()
.withMetricName("SUCCESFUL_POST_COUNT")
.withUnit(StandardUnit.None)
.withValue(2.0)
.withDimensions(dimension);
PutMetricDataRequest request = new PutMetricDataRequest()
.withNamespace("test-ElasticMapReduce")
.withMetricData(datum);
PutMetricDataResult response = cw.putMetricData(request);
System.out.println(response);