簡體   English   中英

Spark程序中版本沖突的最佳解決方案

[英]Best solution for version conflict in Spark program

我有一個Spark程序,需要幾個依賴項。

一個依賴:a.jar是集群a_2.8.jar上2.8的版本,但是,我需要使用它的版本2.9, a_2.9.jar

每次啟動程序時,spark都會自動從集群加載a_2.9.jar ,而不是加載a_2.9.jar ,即使我已經通過--jars a_2.9.jar提交了這個jar。

我嘗試使用spark.executor.userClassPathFirst設置,但還有另一個問題。 在我的userClassPath中有一個“秘密”的jar文件,比如說“ b.jar ”,它不適用於集群,並且有很多依賴項,我不知道哪個jar不起作用。

總結一下:

如果我使用群集默認類路徑, a.jar將發生沖突。

如果我使用userClassPathFirstb.jar將發生沖突。 (我不知道哪個b.jar)

我希望有人可以告訴我,這里最好的解決方案是什么,以盡量減少工作。

使用shade plugin創建Uber Jar可以成為您的解決方案。 Uber jar正在收集包裝罐中的所有依賴罐,這樣我們就不會發生沖突。 我們可以使用shade plugin重新定位/重命名沖突的jar。 還有更多優點。 可在此處此處找到更多信息

最好的解決方案是IMO:

使用包管理器或您想要使用的任何其他工具獲取依賴關系樹。 例如,在maven中你可以使用mvn dependency:tree 看到這里仔細檢查哪些依賴項可能導致類路徑錯誤,並通過在構建文件定義中排除它們來刪除它們,就像這里指出的那樣

然后,重建您的JAR並再次嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM