簡體   English   中英

覆蓋AWS EMR主節點上的默認aws-sdk jar

[英]Overriding default aws-sdk jar on AWS EMR master node

我在EMR主節點上運行我的應用程序時遇到了問題。 它需要訪問ver 1.11中添加的一些AWS SDK方法。 所有必需的依賴項被捆綁到一個胖jar中,應用程序在我的開發框中按預期工作。

但是,如果應用程序在EMR主節點上執行,則在調用AWS SDK ver 1.11+中添加的方法時,它會因NoSuchMethodError異常而失敗,例如

java.lang.NoSuchMethodError:
 com.amazonaws.services.sqs.model.SendMessageRequest.withMessageDeduplicationId(Ljava/lang/String;)Lcom/amazonaws/services/sqs/model/SendMessageRequest;

我將它跟蹤到傳遞給JVM實例的classpath參數,由spark-submit啟動:

-cp /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf/:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/lib/spark/conf/:/usr/lib/spark/jars/*:/etc/hadoop/conf/

特別是,它加載/usr/share/aws/aws-java-sdk/aws-java-sdk-sqs-1.10.75.1.jar而不是使用我的胖罐中的ver 1.11.77。

有沒有辦法強制Spark使用我需要的AWS SDK版本?

這是我學會了解決這個問題的方法。

默認的類路徑參數使用來自spark.driver.extraClassPath設置構造/etc/spark/conf/spark-defaults.conf spark.driver.extraClassPath包含對舊版AWS SDK的引用,該SDK位於/usr/share/aws/aws-java-sdk/*

要使用較新版本的AWS API,我將jar上傳到我在home目錄中創建的目錄,並在--driver-class-path spark-submit參數中指定:

--driver-class-path '/home/hadoop/aws/*'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM