java—在hadoop的mapreduce程序中运行jar文件时出错

g2ieeal7  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(477)

我正在尝试将代码编译成一个jar文件,以便与hadoop的mapreduce一起使用。我的主类是vectormaker.java,控制器结构如下。

  1. RandomForestVectors
  2. /bin
  3. /lib
  4. /hadoop-core-1.2.0.jar
  5. /mahout-core-0.7.jar
  6. /mahout-math-0.7.jar
  7. /opencsv-2.3.jar
  8. /VectorMaker.java

这些是我用来制作jar文件的命令。

  1. javac -classpath "./lib/*" -d ./bin ./VectorMaker.java
  2. jar cf VectorMaker.jar -C "./bin/" . &

这是我用来尝试将jar文件作为hadoopmapreduce程序运行的命令。

  1. hadoop jar VectorMaker.jar VectorMaker user/starmine/AlphaDefault/mahout/random_forest/prevectors /user/starmine/AlphaDefault/mahout/random_forest/test1
  2. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/math/VectorWritable
  3. at VectorMaker.main(VectorMaker.java:67)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  5. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  6. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  7. at java.lang.reflect.Method.invoke(Method.java:597)
  8. at org.apache.hadoop.util.RunJar.main(RunJar.java:208)
  9. Caused by: java.lang.ClassNotFoundException: org.apache.mahout.math.VectorWritable
  10. at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
  11. at java.security.AccessController.doPrivileged(Native Method)
  12. at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
  13. at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
  14. at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

我知道我需要以某种方式使jar文件包含我的所有依赖项,但我不知道如何。

nkkqxpd9

nkkqxpd91#

确保类路径中有所有依赖项,包括所有mahout库。或者,您可以在编译程序时通过-classpath指定路径。
javac-classpath-classpath$mahout\u home/lib/*

相关问题