如您的帖子所述,Spark正在加载的旧版本
httpclient。解决方案是使用Maven的
relocation工具来生成一个简洁的无冲突项目。
这是一个如何在
pom.xml文件中使用它的示例:
<project> <!-- Your project definition here, with the groupId, artifactId, and it's dependencies --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <relocations> <relocation> <pattern>org.apache.http.client</pattern> <shadedPattern>shaded.org.apache.http.client</shadedPattern> </relocation> </relocations> </configuration> </execution> </executions> </plugin> </plugins> </build></project>
这会将所有文件从
org.apache.http.client移到
shaded.org.apache.http.client,从而解决了冲突。
原始帖子:
如果这仅仅是传递依赖关系的问题,则可以将其添加到
spark-core依赖关系中以排除Spark使用的HttpClient:
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.2.2</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </exclusion> </exclusions></dependency>
我还在您的依赖项中添加了
scopeas
provided,因为它将由您的集群提供。
但是,这可能与Spark的内部行为混为一谈。如果执行此操作后仍然出现错误,则可以尝试使用Maven的
relocation工具,该工具应生成一个整洁的,无冲突的项目。
关于您不能升级Spark版本的事实,您是否使用了mvnrepository中的此依赖项声明?
Spark是向后兼容的,因此在具有更高版本的集群上部署您的作业应该没有任何问题。



