我们最近在我们的应用程序中将spark升级到了2.2.0,这在运行时引入了Jackson 2.6.5Jars。
但我们还有其他需要Jackson 2.8.6的服务(由于Elastic 5.5.0),该服务有一个清单,该清单引用了应用程序的lib文件夹中的Jackson 2.8.6。
因此,在运行时中加载了两个版本的Jackson jars,而spark选择了一个错误的版本(从lib文件夹中选择2.8.6,而不是从自己的jars文件夹中选择2.6.5 )。
在windows上,选择的版本是正确的,尽管这两个版本仍然在运行时加载。
但它在Linux上失败了。
我们如何解决这个问题?
发布于 2017-09-22 22:03:52
您可以将jars添加到类路径programatically using addjar
、文件spark-defaults.conf中或使用spark-submit标志。
此外,我们在这里有两个来自runtime-environment docs的属性来缓解冲突
spark.driver.userClassPathFirst
Spark default false (实验性)在驱动程序中加载类时,是否让用户添加的jars优先于
自己的jars。此功能可用于缓解Spark的依赖项和用户依赖项之间的冲突。注释:它目前是一个实验性的特性。这仅在群集模式下使用。
spark.executor.userClassPathFirst
默认false (实验)与
spark.driver.userClassPathFirst
相同的功能,但应用于executor实例。
直接在SparkConf
上设置的属性具有最高优先级,然后是传递给spark-submit
或spark-shell
的标志,最后是spark-defaults.conf
文件中的选项
https://stackoverflow.com/questions/46364712
复制