Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Jackson 2.8版的Spark应用程序与Apache Spark 1.6不兼容_Apache Spark - Fatal编程技术网

Apache spark Jackson 2.8版的Spark应用程序与Apache Spark 1.6不兼容

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

我有一个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选项——这些选项都没有帮助


我将最新的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中遇到过这种情况)。如果您有依赖于包名称的清单,则可能会发生类似问题。此外,这意味着包的两个不同副本(例如,包括静态元素的两个实例)可能会导致问题。这只是意味着你必须小心