2012-05-05 30 views
0

我是新來的Java,並試圖運行使用HIPI一個MR: http://hadoop.apache.org/common/docs/r0.20.2/mapred_tutorial.html 我使用Hadoop 0.20.2:http://hipi.cs.virginia.edu/ 在描述我使用的命令運行Hadoop的.. -libjars使用HIPI

我的命令看起來像: Hadoop的罐子grayscalefromfile_exc.jar grayscalefromfile_exc.StubDriver -libjars HIPI-0.0.1.jar IMGS imgsOut1

所在的路徑是這樣的:

-- 
    --grayscalefromfile_exc.jar 
    --hipi-0.0.1.jar 

錯誤,我得到: 異常在線程 「主要」 java.lang.NoClassDefFoundError:HIPI/imagebundle/MapReduce的/ ImageBundleInputFormat 在grayscalefromfile_exc.StubDriver.run(StubDriver.java:89) 在org.apache.hadoop.util .ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) at grayscalefromfile_exc.StubDriver.main(StubDriver.java:103) at sun.reflect .NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method中。調用(M ethod.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:186) 引發:java.lang.ClassNotFoundException:hipi.imagebundle.mapreduce.ImageBundleInputFormat at java.net.URLClassLoader在Java.net.URLClassLoader.findClass(URLClassLoader.java:190) 上的java.lang.ClassLoader.loadClass(ClassLoader()方法)上的$ 1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) 的.java:306) 在java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 9個

不用說,HIPI-0.0.1.jar,有內部的路徑:HIPI /imagebundle/mapreduce/ImageBundleInputFormat.java

TNX

+0

檢查我的答案在這裏,我已經解釋了所有可用的選項來解決這個問題在這裏:http://stackoverflow.com/a/36227260/1766402 – Isaiah4110

回答

1

libjars上傳給罐子到羣集,然後讓他們在類路徑中每個映射器/減速情況下可用

如果你想更多的jar添加到驅動程序的客戶端類路徑中,你」會需要使用HADOOP_CLASSPATH環境變量:

#> export HADOOP_CLASSPATH=hipi-0.0.1.jar 
#> hadoop jar grayscalefromfile_exc.jar grayscalefromfile_exc.StubDriver -libjars hipi-0.0.1.jar imgs imgsOut1 

而且我的輸出,當我運行這個(錯誤涉及其實我沒有得到一個HIPI像束文件):

[email protected]:~/workspace/sandbox/so-hipi/target$ export $HADOOP_CLASSPATH=/home/cswhite/Downloads/hipi-0.0.1.jar 
[email protected]:~/workspace/sandbox/so-hipi/target$ echo $HADOOP_CLASSPATH 
/home/cswhite/Downloads/hipi-0.0.1.jar 
[email protected]:~/workspace/sandbox/so-hipi/target$ hadoop jar so-hipi-0.0.1-SNAPSHOT.jar StubDriver -libjars ~/Downloads/hipi-0.0.1.jar images output 
num of args: 2:images,output 
****hdfs://localhost:9000/user/cswhite/images 
12/05/14 14:06:34 INFO input.FileInputFormat: Total input paths to process : 1 
12/05/14 14:06:34 INFO mapred.JobClient: Cleaning up the staging area hdfs://localhost:9000/tmp/hadoop-hadoop/mapred/staging/cswhite/.staging/job_201205141351_0003 
12/05/14 14:06:34 ERROR security.UserGroupInformation: PriviledgedActionException as:cswhite cause:java.io.IOException: not a hipi image bundle 
Exception in thread "main" java.io.IOException: not a hipi image bundle 
    at hipi.imagebundle.HipiImageBundle.readBundleHeader(HipiImageBundle.java:322) 
    at hipi.imagebundle.HipiImageBundle.openForRead(HipiImageBundle.java:388) 
    at hipi.imagebundle.AbstractImageBundle.open(AbstractImageBundle.java:82) 
    at hipi.imagebundle.AbstractImageBundle.open(AbstractImageBundle.java:55) 
    at hipi.imagebundle.mapreduce.ImageBundleInputFormat.getSplits(ImageBundleInputFormat.java:61) 
    at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:962) 
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:979) 
    at org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:174) 
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:897) 
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:416) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093) 
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850) 
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:500) 
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530) 
    at StubDriver.run(StubDriver.java:53) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) 
    at StubDriver.main(StubDriver.java:57) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156) 
+0

非常感謝,它的工作:) 你能否也請轉介我到您看到此過程的「導出」命令的位置? (沒有在hadoop -libjars ref中找到它)。 – user1271518

+0

它跑了,但給出了同樣的錯誤: hadoop jar grayscalefromfile_exc.jar grayscalefromfile_exc.StubDriver imgs/imgs.hib imgsOut1 12/05/06 13:01:37 INFO input.FileInputFormat:要輸入的總輸入路徑:1 1產生的任務 12/05/06 13:01:38信息mapred.JobClient:正在運行的作業:job_201205060330_0002 12/05/06 13:01:39信息mapred.JobClient:map 0%reduce 0% 12/05/06 13時01分44秒INFO mapred.JobClient:任務標識:attempt_201205060330_0002_m_000000_0,狀態:失敗 了java.lang.RuntimeException:拋出java.lang.ClassNotFoundException:hipi.imagebundle.mapreduce.ImageBundleInputFormat 在 – user1271518

+0

嘗試設置HADOOP_CLASSPATH到的完全限定路徑該jar,例如:'export HADOOP_CLASSPATH =/home/myus呃/ hipi-0.0.1.jar' –

0

我能夠通過使用以下API中的主要類

DistributedCache.addFileToClassPath(new Path("/path/application.jar"), conf); 

罐子必須在HDFS路徑/path/application.jar來解決類似的問題。

+1

嘿,tnx爲你的答案。它仍然沒有工作,失敗的同一個錯誤。我真的不知道..:/ 我試過用它只與hipi庫 – user1271518