我在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
答案 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)