2017-04-24 53 views
0

我正在使用AWS上的spark 2.1.0运行emr-5.3.1。AWS EMR上的Spark 2.1.0的AWS-SDK对齐错误?

当我提交的火花任务与我的JAR(FAT JAR),我发现了以下错误:

user class threw exception: java.lang.NoSuchMethodError: com.amazonaws.auth.DefaultAWSCredentialsProviderChain.getInstance()Lcom/amazonaws/auth/DefaultAWSCredentialsProviderChain;

我只能猜测那是因为我使用不同的AWS-SDK构建我的罐子版本,然后安装在Spark 2.1.0上

  1. 什么是安装在EMR的Spark 2.1.0上的正确的AWS_SDK版本?
  2. 有没有办法强制我提交的spark任务与我的罐子一起运行?

回答

0

...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)

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

1

我与这种依赖的POM最新的电子病历图像上运行星火2.1.0:

 <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> 

迫使火花与您的罐子运行方式是使用范围“编译”而不是像上面那样“提供”。

顺便说一句,你可以ssh到EMR的法师和运行:

sudo find/-name *aws-sdk*jar 

我做到了,现在看到的版本是77年1月10日

+0

(1)'sudo find/-name * aws-sdk * jar'没有返回任何内容,为什么会这样呢? (2)我不确定你在哪里提供这个POM文件,是spark-submit的一部分吗?汇编? –

+1

对不起,我刚刚注意到你的问题... (1)我的坏..它应该是\ * aws-java-sdk \ * jar (2)pom文件是在汇编中。有些使用sbt而应该是相似的。 @RoeeGavirel –