spark on yarn運行產生jar包衝突問題

1.1 問題描述

Spark Streaming程序解析protobuf序列化的數據時,--jars 來添加依賴的protobuf-java-3.0.0.jar包,使用local模式程序正常,使用yarn模式時會報找不到方法的錯誤,以下所示:java

image.png

1.2 解決方法

分析local模式能運行,yarn模式不能運行的緣由是,用戶提交的protobuf-java-3.0.0.jar與SPARK_HOME/lib下的protobuf-java-2.5.0.jar衝突了,默認會優先加載SPARK_HOME/lib下的jar,而不是你程序的jar,因此會發生「 NoSuchMethodError」。微信

解決方法:提交參數添加 --conf spark.executor.extraClassPath=$user_jars架構

以下圖所示,注意protobuf-java-3.0.0.jar包要分發到全部節點大數據

image.png

此類問題相關參數總結:spa

屬性名稱 默認值 含義
spark.driver.extraClassPath (none) 附加到driver的classpath的額外的classpath實體。這個設置存在的主要目的是Spark與舊版本的向後兼容問題。用戶通常不用設置這個選項
spark.executor.extraClassPath (none) 附加到executors的classpath的額外的classpath實體。這個設置存在的主要目的是Spark與舊版本的向後兼容問題。用戶通常不用設置這個選項
spark.driver.userClassPathFirst false 實驗性)當在driver中加載類時,是否用戶添加的jar比Spark本身的jar, 優先級高。這個屬性能夠下降Spark依賴和用戶依賴的衝突。它如今仍是一個實驗性的特徵。
spark.executor.userClassPathFirst false 實驗性)當在executor中加載類時,是否用戶添加的jar比Spark本身的jar優先級高。這個屬性能夠下降Spark依賴和用戶依賴的衝突。它如今仍是一個實驗性的特徵。

訂閱關注微信公衆號《大數據技術進階》,及時獲取更多大數據架構和應用相關技術文章!

blog

相關文章
相關標籤/搜索