Windows에서 Eclipse를 사용하여 프로젝트를 빌드하고 Linux 클러스터에서 실행하려고합니다. 프로젝트는 Eclipse의 "Export-> Runnable JAR -> Package required library in jar"빌드 옵션을 사용하여 묶은 일부 외부 jar에 의존합니다. 항아리에 폴더 구조 내의 클래스가 들어 있는지 확인하고 외부 항아리가 루트 폴더에 있는지 확인했습니다.Jar는 독립형 Hadoop에서 작동하지만 실제 클러스터에서는 작동하지 않습니다 (java.lang.ClassNotFoundException : org.jfree.data.xy.XYDataset)
Hadoop 독립 실행 형, Cygwin 및 Linux의 경우이 방법은 정상적으로 작동하지만 실제 Hadoop Linux 클러스터에서는 첫 번째 외부 항아리에서 클래스에 액세스하려고 시도 할 때 오류가 발생하여 ClassNotFoundException
이 발생합니다.
Hadoop에서 항아리를 강제로 검색 할 수있는 방법이 있을까요? 클러스터의 각 시스템에 별도로 패키지를 설치/당신이해야 할 그래서
을 (클래스 로더는이 문제를 처리 할 수 없습니다)되고, 또는 :
10/07/16 11:44:59 INFO mapred.JobClient: Task Id : attempt_201007161003_0005_m_000001_0, Status : FAILED
Error: java.lang.ClassNotFoundException: org.jfree.data.xy.XYDataset
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at org.akintayo.analysis.ecg.preprocess.ReadPlotECG.plotECG(ReadPlotECG.java:27)
at org.akintayo.analysis.ecg.preprocess.BuildECGImages.writeECGImages(BuildECGImages.java:216)
at org.akintayo.analysis.ecg.preprocess.BuildECGImages.converSingleECGToImage(BuildECGImages.java:305)
at org.akintayo.analysis.ecg.preprocess.BuildECGImages.main(BuildECGImages.java:457)
at org.akintayo.hadoop.HadoopECGPreprocessByFile$MapTest.map(HadoopECGPreprocessByFile.java:208)
at org.akintayo.hadoop.HadoopECGPreprocessByFile$MapTest.map(HadoopECGPreprocessByFile.java:1)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
는