[英]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.