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

AWS-SDK alignment errors with Spark 2.1.0 on AWS EMR?

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

当我使用 JAR (FAT JAR) 提交 spark 任务时,出现以下错误:

user class threw exception: 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. 有没有办法用我的 jars 强制我提交的 spark 任务 运行?

我正在 运行在最新的 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>

用你的罐子强制 spark 到 运行 的方法是使用范围 "compile" 而不是像我上面那样 "provided"。

顺便说一句,您可以通过 SSH 连接到 EMR 的主服务器和 运行:

 sudo find / -name *aws-sdk*jar

我现在做了,看到版本是1.10.77

...Spark-submit ignores the jars submitted by the user and uses the jars under /usr/share/aws/aws-java-sdk/ which for EMR 5.4 are of version 1.10.75.1. spark-submit has a parameter which can override the server jars with the user jars, however this can cause other issues... (StayerX)

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