我在云端运行发电机插件时发现了一个神秘的例外,有关如何调试此类错误的任何帮助或线索?
背景
我正在运行的代码:
从本地计算机运行时,成功地将数据插入到dynamodb中,但是
在EMR上的mapreduce作业中运行云时,由于身份验证而突然失败。
使用URL端点进行身份验证。
我只是像这样创建凭证:
client=new DynamoDBClient(new BasicAWSCredentials(
"XXXX",
"XXXXXXXXXXX));
client.setEndpoint("https://dynamodb.eu-west-1.amazonaws.com");
我得到的例外情况如下:
Exception in thread "main" java.lang.NoSuchFieldError: requestHandlers
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.init(AWSSecurityTokenServiceClient.java:214)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.<init>(AWSSecurityTokenServiceClient.java:160)
at com.amazonaws.auth.STSSessionCredentialsProvider.<init>(STSSessionCredentialsProvider.java:73)
at com.amazonaws.auth.SessionCredentialsProviderFactory.getSessionCredentialsProvider(SessionCredentialsProviderFactory.java:96)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.setEndpoint(AmazonDynamoDBClient.java:857)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.init(AmazonDynamoDBClient.java:262)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.<init>(AmazonDynamoDBClient.java:181)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.<init>(AmazonDynamoDBClient.java:142)
答案 0 :(得分:2)
这里的“真实”答案是,当我们尝试在现代环境中使用它们时,与最新或当前版本不匹配的dynamodb客户端会出现奇怪的反射/类加载错误。
在我较旧的AMI实例上,我只是发出:
mv $HOME/lib/aws-java-sdk-1.1.1.jar $HOME/lib/aws-java-sdk-1.1.1.jar.old
解决单节点群集上的问题。
导致此错误的根本原因?是因为我使用的是较旧的Ruby elastic-mapreduce客户端,导致在我的EMR云中创建了较旧的AMI版本,这些版本在类路径上有过时的aws-sdk jar。