2017-05-04 24 views
0

私はいくつかの依存関係を必要とするSparkプログラムを持っています。Sparkプログラムのバージョン競合のための最善の解決策

1つの依存関係:a.jarはクラスタa_2.8.jarのバージョン2.8ですが、バージョン2.9,a_2.9.jarを使用する必要があります。

プログラムを起動するたびに、a_2.9.jarの代わりに、sparkが自動的にa_2.8.jarをロードします。--jars a_2.9.jarでこのjarファイルを送信しました。

spark.executor.userClassPathFirstの設定を試しましたが、別の問題があります。 "b.jar"のような "秘密の" jarファイルが、私のuserClassPathにあります。これはクラスタでは動作しません。多くの依存関係があるので、どのjarが動作しないのか分かりません。

要約すると:

私は、クラスタのデフォルトのクラスパスを使用している場合は、a.jarが競合します。

userClassPathFirstを使用すると、b.jarは競合します。 (私はb.jarが分からない)

私は誰かが私に助言してくれることを願っています。仕事を最小限に抑えるために、ここでは最高の解決策は何ですか?あなたのパッケージマネージャか、使用したい他のツールとの依存関係ツリーを取得

答えて

1

Uber Jarを使用して作成すると、shade pluginが解決策になります。 Uber jarは、パッケージングされたjarファイル内のすべての依存jarファイルを収集しており、競合していません。競合するjarをshade pluginと再配置/名前変更することができます。より多くの利点があります。詳細はherehere

です。
1

最善の解決策にIMOです。たとえば、mavenでは、mvn dependency:treesee hereを使用して、どの依存関係がクラスパスエラーを引き起こす可能性があるかを再確認し、it is pointed out hereのようなビルドファイル定義でそれらを除外することで削除できます。

次に、JARを再構築してもう一度やり直してください。

関連する問題