2017-04-24 84 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 –