使用DynamoDBMapper加密EMR中的数据时出现IllegalAccessError。

问题描述 投票:0回答:1

我遵循了这个文档。https:/docs.aws.amazon.comdynamodb-encryption-clientlatestdevguidejava-examples.html。 并设置加密客户端和映射器来加密一个项目并批量保存到Table中,但它无法工作,并抛出以下错误。

堆栈 跟踪详情。

ERROR 客户端: 应用程序诊断信息。用户类抛出异常:java.lang.IllegalAccessError: tried to access class com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingsRegistry from class com.amazonaws.services.dynamodbv2.datamodeling. AttributeEncryptor at com.amazonaws.services.dynamodbv2.datamodeling.AttributeEncryptor.getModelClassMetadata(AttributeEncryptor.java:156) at com.amazonaws.services.dynamodbv2.datamodeling.AttributeEncryptor.transform(AttributeEncryptor. java:65) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.transformAttributes(DynamoDBMapper.java:2180) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.batchWrite(DynamoDBMapper. java:1229) at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.batchSave(AbstractDynamoDBMapper.java:193) at com.amazon.payrolldatalakeemr.awsoperations.DDBOperations$.batchSaveInDDB(DDBOperations.scala:40)

配置细节。

        AWSJavaSDKExternalRelease = 1.11.x;
        # Spark dependencies
        Spark-core = 2.2.1;
        Spark-sql = 2.2.1;
        DaxJavaClient = 1.0;
        ANTLR-Runtime = 3.5.x;
        DynamoDbGrammar = 1.0;

        Lombok = 1.16.x;
        LombokUtils = 1.1;
        Maven-com-amazonaws_aws-dynamodb-encryption-java = 1.x;

Mapper代码:

      def getDynamoDBMapper(region: String): DynamoDBMapper = {
val cmkArn = "*****************************"
val kms: AWSKMS = AWSKMSClientBuilder.standard().withRegion(region).build()
val cmp: DirectKmsMaterialProvider = new DirectKmsMaterialProvider(kms, cmkArn)
val encryptor: DynamoDBEncryptor = DynamoDBEncryptor.getInstance(cmp)
val mapperConfig: DynamoDBMapperConfig = DynamoDBMapperConfig.builder.withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.CLOBBER).build

new DynamoDBMapper(ddclient, mapperConfig, new AttributeEncryptor(encryptor))

}

scala apache-spark amazon-dynamodb amazon-emr
1个回答
0
投票

添加spark属性后解决:--conf spark.driver.userClassPathFirst=true。

© www.soinside.com 2019 - 2024. All rights reserved.