AWS EMR上使用Spark 2.1.0的AWS-SDK对齐错误?

时间:2017-04-24 10:00:41

标签: amazon-web-services apache-spark emr amazon-emr

我在AWS上使用spark 2.1.0运行emr-5.3.1。

当我用我的JAR(FAT JAR)提交spark任务时,我收到以下错误:

  

用户类抛出异常:java.lang.NoSuchMethodError:   com.amazonaws.auth.DefaultAWSCredentialsProviderChain.getInstance()LCOM / amazonaws / AUTH / DefaultAWSCredentialsProviderChain;

我只能猜测是因为我使用与Spark 2.1.0中安装的版本不同的AWS-SDK版本构建我的jar

  1. EMR的Spark 2.1.0上安装了哪个正确的AWS_SDK版本?
  2. 有没有办法强制我提交的火花任务与我的罐子一起运行?

2 个答案:

答案 0 :(得分:1)

我在最新的EMR图像上运行Spark 2.1.0,并在POM中使用此依赖项:

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.10.75</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <artifactId>jackson-databind</artifactId>
                    <groupId>com.fasterxml.jackson.core</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jackson-dataformat-cbor</artifactId>
                    <groupId>com.fasterxml.jackson.dataformat</groupId>
                </exclusion>
            </exclusions>
        </dependency>

强制火花与你的罐子一起运行的方法是使用范围&#34;编译&#34;而不是&#34;提供&#34;正如我上面所做的那样。

BTW你可以通过SSH连接到EMR的主人并运行:

 sudo find / -name *aws-sdk*jar

我现在做了,发现版本是1.10.77

答案 1 :(得分:0)

  

... Spark-submit忽略用户提交的jar并使用jar   在 / usr / share / aws / aws-java-sdk / 下,适用于EMR 5.4的版本   1.10.75.1。 spark-submit有一个参数,可以用用户jar覆盖服务器jar,但是这可能导致其他问题......(StayerX)

原帖:https://github.com/aws/aws-sdk-java/issues/1094