Apache spark Jackson 2.8版的Spark应用程序与Apache Spark 1.6不兼容
我有一个Spark应用程序,它使用Jackson 2.8 API,我使用应用程序pom.xml中提供的Spark 1.6(范围)依赖项。当我尝试在集群模式下部署Spark应用程序时,选择了Spark 1.6版本的Jackson旧版本,导致应用程序失败 我厌倦了通过“-jars”选项提供2.8 Jackson jar,构建包含最新Jackson依赖项的Uber应用程序jar,以及executor/driver上的userClasspathFirst选项——这些选项都没有帮助Apache spark Jackson 2.8版的Spark应用程序与Apache Spark 1.6不兼容,apache-spark,Apache Spark,我有一个Spark应用程序,它使用Jackson 2.8 API,我使用应用程序pom.xml中提供的Spark 1.6(范围)依赖项。当我尝试在集群模式下部署Spark应用程序时,选择了Spark 1.6版本的Jackson旧版本,导致应用程序失败 我厌倦了通过“-jars”选项提供2.8 Jackson jar,构建包含最新Jackson依赖项的Uber应用程序jar,以及executor/driver上的userClasspathFirst选项——这些选项都没有帮助 我将最新的Jackso
我将最新的Jackson jar放在同一位置的所有Spark worker节点中,并将路径添加到executor classpath选项中——只有在该选项中,才会选择最新的Jackson版本。在这个解决方案中,每次我向应用程序添加一个新的worker节点时,我都必须放置最新的Jackson,我发现这是一个缺点。如果有人有更好的解决方案,请告诉我。你可以试着给杰克逊遮阴。例如,在maven中,您可以执行以下操作:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<relocations>
<relocation>
<pattern>com.fastxml.jackson</pattern>
<shadedPattern>com.mycompany.shaded.com.fastxml.jackson</shadedPattern>
</relocation>
</relocations>
<finalName>FatJarName</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
maven阴影插件
包裹
阴凉处
真的
com.fastxml.jackson
com.mycompany.shade.com.fastxml.jackson
法特贾勒姆
其想法是,它将基本上重命名jackson软件包,并将更改您使用该软件包的内部访问权限。然后提交新的脂肪罐
注意:这并不总是有效(特别是如果您使用反射访问jackson,它可能指向错误的版本)。谢谢Assaf!它对我有用。在Shade插件中使用重定位功能时是否存在任何缺点/问题?发布了一个不同的问题以了解重定位功能的缺点,因为我觉得它不在本主题范围内。@Prabusoundarajan我知道的最重要的一点是,如果使用反射,它可能会中断(例如,我在Spring中遇到过这种情况)。如果您有依赖于包名称的清单,则可能会发生类似问题。此外,这意味着包的两个不同副本(例如,包括静态元素的两个实例)可能会导致问题。这只是意味着你必须小心