Apache Spark를 사용하여 Java 응용 프로그램을 개발 중입니다.httpclient 버전과 Apache Spark 사이의 충돌
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
나는 하나의 JAR 파일로 내 응용 프로그램을 패키지 : 과도 의존성이 내 코드에서
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.2</version>
</dependency>
:이 버전을 사용하십시오. 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
이 같은 아파치 HttpClient를 라이브러리의 이전 버전을로드 한 것을 명확하게 보여주고이 충돌이 이유로 발생합니다.
이 문제를 해결하기위한 좋은 방법은 무엇입니까?
어떤 이유로 Java 코드에서 Spark를 업그레이드 할 수 없습니다. 그러나 EC2 클러스터로 쉽게 할 수있었습니다. 1.6.1 버전보다 높은 버전의 클러스터에 내 Java 코드를 배포 할 수 있습니까?
문제는 실제로 재배치에 의해 해결되었습니다. 'apache-shade-plugin' 사용법을 자세히 설명해 주시면 답변으로 받아 들일 것입니다. –
@ M-T-A 도움이 되니 기쁩니다. 내 답변을 업데이트했지만 패턴 태그의 올바른 패키지를 참조하고 있음을 확인할 수 있습니까? –
예, 맞습니다. 그냥 대답으로 선택했습니다. –