Cloudera CDH 5.8.0 가상 상자를 실행하기 위해 작업을 제출하려고하고 json 라이브러리를 사용하고 있으며 또한 maven-shade 플러그인을 사용합니다.Cloudera CDH 5.8.0 가상 상자와 스파크 라이브러리 충돌을 해결하는 방법
spark-submit --class com.example.spark.SparkParser --master local[*] uber-spark-0.0.1-SNAPSHOT.jar
그리고 나는 다음과 같은 예외가 점점 계속 :
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spark</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>uber-${project.artifactId}-${project.version}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>
제출 명령은 다음과 같습니다
Exception in thread "main" java.lang.NoSuchMethodError:
org.json.JSONTokener.<init>(Ljava/io/InputStream;)
0123을 jar 파일에 대한 종속성을 포함, 다음은 내 치어입니다
나는 클래스가로드되는 라이브러리에서 알 수있는 작은 다음 코드 발견 :
ClassLoader classloader = org.json.JSONTokener.class.getClassLoader();
URL res = classloader.getResource("org/json/JSONTokener.class");
String path = res.getPath();
System.out.println("Core JSONTokener came from " + path);
을 그리고 출력은 다음과 같습니다 : 나는 가상에 로컬 파일을 찾을 수 있습니다
Core JSONTokener came from file:/usr/lib/hive/lib/hive-exec-1.1.0-cdh5.8.0.jar!/org/json/JSONTokener.class
여전히 같은 잘못을 나는 심지어 내 jar 파일에서 제외하는 '제공'으로 JSON 라이브러리를 만들려고
[[email protected] ~]$ ls -l /usr/lib/hive/lib/hive-exec-1.1.0-cdh5.8.0.jar
-rw-r--r-- 1 root root 19306194 Jun 16 2016 /usr/lib/hive/lib/hive-exec-1.1.0-cdh5.8.0.jar
:하지만, 다음과 같이 CDH의 상자 또는.
나는라는 이름의 로컬 jar 파일 제거하려고 : /usr/lib/hive/lib/hive-exec-1.1.0-cdh5.8.0.jar 을 그리고 내 코드는 제대로 작동하지만이 확실하지 않다 올바른 해결책이고,이 라이브러리를 제거하면 cloudera가 어떻게 든 상처를 입을 수 있습니다.그렇다면 어떻게 spark에이 로컬 jar 파일을 사용하지 말고 내 'uber-spark-0.0.1-SNAPSHOT.jar'파일에 포함 된 것을 사용 할 수 있습니까?