小编Den*_*nko的帖子

覆盖 AWS EMR 主节点上的默认 aws-sdk jar

我在 EMR 主节点上运行应用程序时遇到问题。它需要访问1.11版本中添加的一些AWS SDK方法。所有必需的依赖项都捆绑到一个 fat jar 中,并且该应用程序在我的开发盒上按预期工作。

但是,如果应用程序在 EMR 主节点上执行,则在调用 AWS SDK 版本 1.11+ 中添加的方法时,它会失败并出现 NoSuchMethodError 异常,例如

java.lang.NoSuchMethodError:
 com.amazonaws.services.sqs.model.SendMessageRequest.withMessageDeduplicationId(Ljava/lang/String;)Lcom/amazonaws/services/sqs/model/SendMessageRequest;
Run Code Online (Sandbox Code Playgroud)

我追踪到传递给 JVM 实例的类路径参数,由 Spark-submit 启动:

-cp /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf/:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/lib/spark/conf/:/usr/lib/spark/jars/*:/etc/hadoop/conf/
Run Code Online (Sandbox Code Playgroud)

特别是,它加载 /usr/share/aws/aws-java-sdk/aws-java-sdk-sqs-1.10.75.1.jar,而不是使用我的 fat jar 中的版本 1.11.77。

有没有办法强制 Spark 使用我需要的 AWS SDK 版本?

java amazon-web-services amazon-emr apache-spark

7
推荐指数
1
解决办法
2249
查看次数