Apache Sparkを使用してJavaアプリケーションを開発しています。私は、単一のJARファイルに自分のアプリケーションをパッケージ化httpclientバージョンとApache Sparkの間の競合
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
:過渡的依存性があり、私のコードで
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.2</version>
</dependency>
:私は、このバージョンを使用しています。を使用してEC2インスタンスにデプロイすると、このエラーが発生します。
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.getPreferredSocketFactory(ApacheConnectionManagerFactory.java:87)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:65)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:58)
at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:50)
at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:38)
このエラーはSparkSubmit
が同じApacheのHTTPClientのライブラリの古いバージョンをロードしており、この紛争はこの理由のために起こることを明らかに示しています。
この問題を解決するにはどうすればよいですか?
何らかの理由で、JavaコードでSparkをアップグレードできません。しかし、私はEC2クラスターでそれを簡単に行うことができました。私のJavaコードを、より高いバージョンの1.6.1バージョンのクラスターにデプロイすることは可能ですか?
問題は実際に再配置によって解決されました。あなたが 'apache-shade-plugin'の使い方を詳しく説明したら、私はそれを答えとして受け入れます。 –
@ M-T-Aそれは助けてくれてうれしい。自分の答えを更新しましたが、パターンタグの正しいパッケージを参照していることを確認できますか? –
はい、正しい。ちょうど答えとして選んだ。 –