1.1 問題描述
Spark Streaming程序解析protobuf序列化的數據時,--jars 來添加依賴的protobuf-java-3.0.0.jar包,使用local模式程序正常,使用yarn模式時會報找不到方法的錯誤,如下所示:
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包要分發到所有節點
此類問題相關參數總結:
屬性名稱 | 默認值 | 含義 |
---|---|---|
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依賴和用戶依賴的沖突。它現在還是一個實驗性的特征。 |
訂閱關注微信公眾號《大數據技術進階》,及時獲取更多大數據架構和應用相關技術文章!