Java Dynamodb请求处理程序接受
我在云中运行dynamo Insert时发现了一个神秘的异常,关于如何调试这样的错误,有什么帮助或线索吗 背景 我正在运行的代码:Java Dynamodb请求处理程序接受,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,我在云中运行dynamo Insert时发现了一个神秘的异常,关于如何调试这样的错误,有什么帮助或线索吗 背景 我正在运行的代码: 从本地机器运行时,成功地将数据插入dynamodb,但 通过EMR在云中运行mapreduce作业时,由于身份验证而突然失败 使用URL端点进行身份验证 我只需创建如下凭据: client=new DynamoDBClient(new BasicAWSCredentials( "XXXX", "XXXXXXXXXXX));
- 从本地机器运行时,成功地将数据插入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)
线程“main”java.lang.NoSuchFieldError中的异常:requestHandlers
位于com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.init(AWSSecurityTokenServiceClient.java:214)
位于com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.(AWSSecurityTokenServiceClient.java:160)
访问com.amazonaws.auth.STSSessionCredentialsProvider。(STSSessionCredentialsProvider.java:73)
位于com.amazonaws.auth.SessionCredentialsProviderFactory.getSessionCredentialsProvider(SessionCredentialsProviderFactory.java:96)
在com.amazonaws.services.dynamodb.AmazonDynamoDBClient.setEndpoint(AmazonDynamoDBClient.java:857)
位于com.amazonaws.services.dynamodb.AmazonDynamoDBClient.init(AmazonDynamoDBClient.java:262)
位于com.amazonaws.services.dynamodb.AmazonDynamoDBClient.(AmazonDynamoDBClient.java:181)
位于com.amazonaws.services.dynamodb.AmazonDynamoDBClient.(AmazonDynamoDBClient.java:142)
这里的“真实”答案是,当我们试图在现代环境中使用与最新或当前版本不匹配的dynamodb客户端时,它们可能会出现奇怪的反射/类加载错误
- AWS JAR存在于较旧的EMR AMI实例的类路径上,可能与hadoop作业使用的适当(最新)AWS JAR冲突,hadoop作业调用非EMR服务(即,在我们的例子中,如dynamodb)李>
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 更新:似乎有一个旧版本的aws sdk 1.1.1包含在EMR节点中!这可能会导致类版本控制冲突。我不确定解决问题的最佳方法,但我现在正在考虑一些选项并运行测试。