2014-07-23 18 views
0

我寫了一個簡單的應用程序,使用OpenCV。我把所有的jar文件放在/ usr/local/hadoop/lib文件夾中。在運行hadoop作業時,出現以下錯誤:Hadoop中的OpenCV庫

java.lang.Exception: java.lang.NoClassDefFoundError: com/googlecode/javacv/cpp/opencv_core$CvArr at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:399) Caused by: java.lang.NoClassDefFoundError: com/googlecode/javacv/cpp/opencv_core$CvArr at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:1486) at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1456) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1545) at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:686) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:333) at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:231) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_core$CvArr at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 15 more

任何想法如何解決此問題?

+0

可以顯示,你如何運行hadoop工作? – undefined

+0

這是我如何執行:./bin/hadoop jar /usr/local/MyApp.jar MainProc/examples/inputfile/usr/local/output –

回答

0

運行hadoop作業時,您可以嘗試使用選項libjars。請嘗試以下操作:

hadoop jar yourjar.jar MainClass -libjars /path/to/external/jar 

更多信息here

+0

問題是我執行hadoop作業時有一個輸入和輸出參數。如果我添加-libjars,那麼系統說它需要一個輸入和一個輸出。 –

+0

如果在'-libjars/path/to/external/jar'之後添加輸入和輸出文件夾,它會工作嗎? – Balduz

+0

不,它不。這裏是我現在輸入的內容:./bin/hadoop jar /usr/local/v.jar MainProc -libjars/us r/local/hadoop/lib/javacpp.jar/examples/input/usr/local/output 這是我的系統在參數不是2時所說的:用法:MainProc