在EMR上运行mahout RecommenderJob

时间:2012-07-29 11:00:33

标签: jar mahout amazon-emr emr

我正在尝试在亚马逊EMR上运行RecommenderJob。我有一个名为SmartJukebox.jar的jar(不是runnable),它包含一个类main.TrackRecommander(就是这样)。

我用jar创建了一个作业流程:

S3N://smartjukebox/SmartJukebox.jar

和args:

main.TrackRecommander --input s3n://smartjukebox/ratings.csv --output s3n:// smartjukebox / output --usersFile s3n://smartjukebox / user.txt。

TrackRecommander类使用RecommenderJob类。

我运行作业流程,我在错误日志中得到了这个 -

  

线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / mahout / cf / taste / hadoop / item / RecommenderJob       在main.TrackRecommander.main(TrackRecommander.java:136)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)       在java.lang.reflect.Method.invoke(Method.java:597)       在org.apache.hadoop.util.RunJar.main(RunJar.java:156)   引起:java.lang.ClassNotFoundException:org.apache.mahout.cf.taste.hadoop.item.RecommenderJob       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:190)       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)       ......还有6个

现在我看到JVM找不到RecommenderJob,我没有将RecommenderJob放入我的jar中。我以为EMR会内置mahout罐子,但我找不到任何相关内容。

这里有什么解决方案?

感谢。

2 个答案:

答案 0 :(得分:0)

你的问题正是你说的:“我没有把RecommenderJob放在我的罐子里。”除非你把这些课程放在你的JAR中,否则它无法找到。为什么EMR会内置这个?首先将Mahout“.job”文件类添加到JAR中。

答案 1 :(得分:0)

您需要创建一个作业jar,其中包含要运行的代码所需的所有类,其中包括mahout类。 看一眼 https://github.com/tdunning/MiA

检查如何使用pom.xml中的maven程序集插件和src / main / resources目录中的job.xml创建作业jar。 如果排除hadoop类,则可以在任何hadoop实例上运行它。