2012-07-25 13 views
0

在雲中運行電機插入時,我發現了一個神祕的異常,有關如何調試這樣的錯誤的幫助或線索?Dynamodb requestHandler接受

背景

我運行該代碼:從我的本地機器上運行時

  • 成功與插入數據到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

更新:似乎有一箇舊版本的aws-sdk,1.1.1包含在EMR節點中!這可能會導致類版本衝突。林不知道最好的解決辦法,但現在正在考慮一些選擇和運行測試。 – jayunit100 2012-07-26 21:46:16

回答

1

「真正」 的答案在這裏,是,dynamodb客戶這當我們嘗試在現代環境中使用它們時,不匹配最新版本或當前版本可能會出現奇怪的反射/類加載錯誤。

  • AWS瓶舊的EMR AMI實例的類路徑上存在可通過調用非EMR服務的Hadoop作業中使用正確的(最新的)AWS罐發生衝突(即如dynamodb,在我們的例子)。

在我的舊的AMI實例,我只是發出:

mv $HOME/lib/aws-java-sdk-1.1.1.jar $HOME/lib/aws-java-sdk-1.1.1.jar.old 

要解決單節點集羣上的問題。


ROOT cause this error?是因爲我使用了一個較老的Ruby彈性映射客戶端,這導致在我的EMR雲中創建較早的AMI版本,而在類路徑中已經過時了aws-sdk jars。