Spark Streaming程序解析protobuf序列化的數據時,--jars 來添加依賴的protobuf-java-3.0.0.jar包,使用local模式程序正常,使用yarn模式時會報找不到方法的錯誤,以下所示:java
分析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包要分發到全部節點大數據
此類問題相關參數總結: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