mahout写的程序怎么打包在hadoop上面运行?

ramontop1 2014-10-22 04:29:31
mahout程序在eclipse的单机运行正常,然后eclipse export出来打包,hadoop运行:
hadoop jar RF.jar Rf
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/common/RandomWrapper
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
Caused by: java.lang.ClassNotFoundException: org.apache.mahout.common.RandomWrapper
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:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

我直接
java -jar RF.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/common/RandomWrapper
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
at java.lang.Class.getMethod0(Class.java:2813)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.mahout.common.RandomWrapper
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:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more

估计打包有问题。难道这个包找不到还是怎地?

网上有说着pom里面加什么插件什么的,试了试也不好用。
java新手求指教。
...全文
606 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
稍微看了下mahout已经import hdfs读写的方法了,明天仔细看下。 真心感谢sky_walker85
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
好滴,我试试,真谢啦。 私信加个QQ呗?
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
跟这个方法有关fileAsStringArray,应该是不识别HDFS文件系统,你可以使用HDFS文件系统API改写原有的方法
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
fileAsStringArray方法是转换成字符串数组,每一行数据作为数组里面一个元素。 我试了下,好像不可以: Exception in thread "main" java.io.FileNotFoundException: hdfs:/cluster01.hca.com:9000/dataset/n2.csv (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:146) at java.io.FileInputStream.<init>(FileInputStream.java:101) at com.packtpub.mahoutcookbook.Rf.fileAsStringArray(Rf.java:107) at com.packtpub.mahoutcookbook.Rf.main(Rf.java:25) 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:606) at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
引用 9 楼 ramontop1 的回复:
[quote=引用 8 楼 sky_walker85 的回复:] 读哪里的文件跟源代码中要求输入的参数有关,具体你可以看一下MahoutKaggleDigitRecognizer.java这个类的源代码,我手头没有这个的代码
读文件就一句: String[] trainDataValues = fileAsStringArray("/home/hadoop/dataset/n2.csv"); 难道要写成hdfs://那种形式吗? 仁兄在线解答很给力啊,谢啦。[/quote] 是的,不过还得看看fileAsStringArray方法能不能将HDFS文件转换为字符串数组
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
我按照你的地址看了一下源代码,读的是String[] trainDataValues = fileAsStringArray("C:/Users/surenr/git/mahout-ramdom-forest/src/main/java/org/apache/mahout/examples/ramdomforest/train.csv");下的数据,所以你就需要将路径改为HDFS上的路径,并确认确实存在train.csv文件
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
引用 8 楼 sky_walker85 的回复:
读哪里的文件跟源代码中要求输入的参数有关,具体你可以看一下MahoutKaggleDigitRecognizer.java这个类的源代码,我手头没有这个的代码
读文件就一句: String[] trainDataValues = fileAsStringArray("/home/hadoop/dataset/n2.csv"); 难道要写成hdfs://那种形式吗? 仁兄在线解答很给力啊,谢啦。
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
读哪里的文件跟源代码中要求输入的参数有关,具体你可以看一下MahoutKaggleDigitRecognizer.java这个类的源代码,我手头没有这个的代码
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
引用 6 楼 sky_walker85 的回复:
你早说是hadoop-2.2.0就好了,放到该目录下share\hadoop\common\lib试试
不错,真有效果,啊哈~ 不过貌似还是读的本地文件系统,因为我没有该文件路径就运行成功了。 怎么叫他去读hdfs?
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
你早说是hadoop-2.2.0就好了,放到该目录下share\hadoop\common\lib试试
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
引用 4 楼 sky_walker85 的回复:
[quote=引用 3 楼 ramontop1 的回复:] [quote=引用 2 楼 sky_walker85 的回复:] MahoutKaggleDigitRecognizer.java这个类应该引用了org/apache/mahout/common/RandomWrapper吧,你类路径中没有mahout相关的jar包就会出现上述错误
谢答。 类路径?CLASSPATH吗?怎么搞,把那个jar包加进去? eclipse里面是用maven管理依赖包的,难道都要加进去还是怎地?[/quote] 你可以将mahout的jar包放入hadoop的lib目录中,试试吧[/quote] 貌似不可以。 hadoop的lib目录下面是空的啊?我也木有把它加到classpath里面。 这是我的.bashrc里有关的部分: # hadoop export HADOOP_HOME=/home/hadoop/hadoop-2.2.0 export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/ export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_YARN_CONF_DIR=$HADOOP_CONF_DIR export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH # zookeeper & hbase export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.5 export HBASE_HOME=/home/hadoop/hbase-0.96.2 export PATH=$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$PATH export CLASSPATH=$HBASE_HOME/lib:$CLASSPATH # sqoop & hive export SQOOP_HOME=/home/hadoop/sqoop-1.4.5 export HIVE_HOME=/home/hadoop/hive-0.13.1 export PATH=$SQOOP_HOME/bin:$HIVE_HOME/bin:$PATH export CLASSPATH=$SQOOP_HOME/lib:$HIVE_HOME/lib:$CLASSPATH # mahout export MAHOUT_HOME=/home/hadoop/mahout-0.9 export MAHOUT_LOCAL export PATH=$MAHOUT_HOME/bin:$PATH export CLASSPATH=$MAHOUT_HOME/lib:$CLASSPATH 如果不用hadoop直接java -jar能运行的话该咋整呢?
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
引用 3 楼 ramontop1 的回复:
[quote=引用 2 楼 sky_walker85 的回复:] MahoutKaggleDigitRecognizer.java这个类应该引用了org/apache/mahout/common/RandomWrapper吧,你类路径中没有mahout相关的jar包就会出现上述错误
谢答。 类路径?CLASSPATH吗?怎么搞,把那个jar包加进去? eclipse里面是用maven管理依赖包的,难道都要加进去还是怎地?[/quote] 你可以将mahout的jar包放入hadoop的lib目录中,试试吧
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
引用 2 楼 sky_walker85 的回复:
MahoutKaggleDigitRecognizer.java这个类应该引用了org/apache/mahout/common/RandomWrapper吧,你类路径中没有mahout相关的jar包就会出现上述错误
谢答。 类路径?CLASSPATH吗?怎么搞,把那个jar包加进去? eclipse里面是用maven管理依赖包的,难道都要加进去还是怎地?
skyWalker_ONLY 2014-10-22
  • 打赏
  • 举报
回复
MahoutKaggleDigitRecognizer.java这个类应该引用了org/apache/mahout/common/RandomWrapper吧,你类路径中没有mahout相关的jar包就会出现上述错误
ramontop1 2014-10-22
  • 打赏
  • 举报
回复
程序代码可以参考这个: https://github.com/surenraju/mahout-ramdomforest/blob/master/src/main/java/org/apache/mahout/examples/ramdomforest/MahoutKaggleDigitRecognizer.java

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧