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