【发布时间】:2016-10-17 00:55:48
【问题描述】:
我正在使用 Apache Spark 开发 Java 应用程序。我用这个版本:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.2</version>
</dependency>
在我的代码中,有一个过渡依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
我将我的应用程序打包到一个 JAR 文件中。当使用spark-submit 在 EC2 实例上部署它时,我收到此错误。
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.getPreferredSocketFactory(ApacheConnectionManagerFactory.java:87)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:65)
at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:58)
at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:50)
at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:38)
此错误清楚地表明SparkSubmit 已加载同一 Apache httpclient 库的旧版本,因此会发生此冲突。
有什么好的方法可以解决这个问题?
由于某种原因,我无法在我的 Java 代码上升级 Spark。但是,我可以轻松地使用 EC2 集群做到这一点。是否可以将我的 java 代码部署在更高版本的集群上,比如 1.6.1 版本?
【问题讨论】:
标签: java apache-spark amazon-ec2 apache-httpclient-4.x