hadoop map-reduce 작업 jar의 "lib"폴더에 종속 라이브러리를 패키징하는 데 사용되었습니다. 그건 잘 작동합니다. 그러나 이번에는 잘못되었습니다. 어떤 사람이 문제를 해결할 수있는 아이디어를 줄 수 있습니까? 문제는 다음과 같습니다 :hadoop 작업 jar의 "lib"폴더에 패키지 종속 라이브러리가있을 때 ClassNotFoundException이 발생했습니다.
Eclipse "내보내기"기능과 "필요한 라이브러리를 생성 된 JAR로 추출"옵션으로 작업 항아리를 패키징 할 때. 생성 된 작업 항아리가 올바르게 작동합니다.
java.io.IOException: Split class cascading.tap.hadoop.MultiInputSplit not found
at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:340)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:365)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
Caused by: java.lang.ClassNotFoundException: cascading.tap.hadoop.MultiInputSplit
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:943)
at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:338)
... 7 more
사람이 몇 가지 아이디어를 제공 할 수 있습니다 : 나는 작업 항아리에서 "LIB"폴더에 의존 라이브러리를 포함하는 개미 스크립트와 함께 작업 항아리를 포장하는 경우
는하지만, 나는 ClassNotFoundException가 발생? 감사!
그리고 당신은 절대적으로 항아리에 lib 폴더에 종속 항아리가 들어 있다고 확신합니다 - jar -tvf myJar.jar이 이것을 알고 있습니까? –
두 항아리 추출 : 이클립스에 의해 만들어진 하나와 개미에 의해 만들어진 다른 ... 어떤 차이가 나타 납니까? 나는이 문제를 일으킬 수있는 개미 파일에 누락 된 것이있을 것이라고 추측합니다. –
그래, 그 수업은 분명 거기있을거야. 계단식 클래스입니다. 나는 여러 번 점검했다. 개미 생성 된 jar 파일에서 계단식 클래스 파일의 압축을 풉니 다. 아직도 문제. – Enlight