1

クラウドでdynamo挿入を実行すると、不可解な例外が見つかりました。そのようなエラーをデバッグする方法に関するヘルプや手がかりはありますか?

バックグラウンド

私が実行しているコード:

  • ローカルマシンから実行すると、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)
4

1 に答える 1

2

ここでの「本当の」答えは、最新または現在のバージョンと一致しない dynamodb クライアントは、最新の環境で使用しようとすると、奇妙なリフレクション/クラス読み込みエラーを示す可能性があるということです。

  • 古い EMR AMI インスタンスのクラスパスに存在する AWS jar は、EMR 以外のサービス (この場合は dynamodb など) を呼び出す Hadoop ジョブによって使用される適切な (最新の) AWS jar と競合する可能性があります。

私の古い 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 が含まれていました。

于 2012-07-27T00:15:18.170 に答える