EMRマスターノードでアプリケーションを実行する際に問題が発生しています。バージョン1.11で追加されたいくつかのAWS SDKメソッドにアクセスする必要があります。すべての必要な依存関係はfat jarにバンドルされていて、アプリケーションは私の開発ボックスで期待通りに動作します。AWS EMRマスターノードのデフォルトaws-sdk jarのオーバーライド
ただし、アプリケーションがEMRマスターノードで実行されると、メソッド呼び出し時にNoSuchMethodError例外が発生し、AWS SDK ver 1.11以降に追加されます。
java.lang.NoSuchMethodError:
com.amazonaws.services.sqs.model.SendMessageRequest.withMessageDeduplicationId(Ljava/lang/String;)Lcom/amazonaws/services/sqs/model/SendMessageRequest;
私は火花提出によって開始されたJVMインスタンスに渡されるクラスパスパラメータ、それを突き止め:それはを/ usr/share/AWS/AWS-javaの-SDKをロードし、
特に-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/
/aws-java-sdk-sqs-1.10.75.1.jarの代わりに、私のファットジャーからver 1.11.77を使用してください。
Sparkに必要なAWS SDKバージョンを強制的に使用する方法はありますか?
'trueに設定spark.executor.userClassPathFirst'のように見えますがクラスパスのparamsを上書きするためにあなたの提供jarファイルを許可する必要があります。 html –
@DaveMaple:spark-submitコマンドラインに--conf spark.driver.userClassPathFirst = trueを追加しようとしました。私のアプリケーションは、スレッド "main"の例外でほぼ直ちに存在します。java.lang.RuntimeException:java.lang.RuntimeException:クラスorg.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallbackはorg.apache.hadoop.security.GroupMappingServiceProviderではありません。それは私にバージョンの競合のように見えます。 –
ダン。ええ。私たちは、aws sdkについてのみ選択的でなければならないと思う。これについて考えるでしょう。 –