2017-01-16 24 views
3

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バージョンを強制的に使用する方法はありますか?

+0

'trueに設定spark.executor.userClassPathFirst'のように見えますがクラスパスのparamsを上書きするためにあなたの提供jarファイルを許可する必要があります。 html –

+0

@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ではありません。それは私にバージョンの競合のように見えます。 –

+0

ダン。ええ。私たちは、aws sdkについてのみ選択的でなければならないと思う。これについて考えるでしょう。 –

答えて

2

これは私がこれをトラブルシューティングしようとしたことです。

デフォルトのクラスパスパラメータは、/etc/spark/conf/spark-defaults.confのspark.driver.extraClassPath設定を使用して作成されます。 spark.driver.extraClassPathは、AWSのAPIの新しいバージョンを使用するには/usr/share/aws/aws-java-sdk/*

に位置している古いバージョンAWS SDKへの参照が含まれている、私はホームディレクトリに作成されたディレクトリにjarファイルをアップロードし、それを指定しました​​​​パラメータ:http://spark.apache.org/docs/latest/configuration:

--driver-class-path '/home/hadoop/aws/*' 
関連する問題