我正在使用Apache Spark开发Java应用程序.我用这个版本:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,存在过渡依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我将我的应用程序打包到一个JAR文件中.使用时在EC2实例上部署它时spark-submit,我收到此错误.
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)
Run Code Online (Sandbox Code Playgroud)
此错误清楚地表明SparkSubmit已加载相同Apache httpclient库的旧版本,因此出现此冲突.
解决这个问题的好方法是什么?
出于某种原因,我不能在我的Java代码上升级Spark.但是,我可以轻松地使用EC2群集.是否可以在具有更高版本的1.6.1版本的集群上部署我的Java代码?
我如何告诉 sbt-Assembly 保留其现有的合并/重复数据删除规则,除非两个.class文件冲突、重命名(并发出警告以便我了解)?
这与 Maven 中使用的阴影策略相同吗?