2012-07-29 82 views
1

我试图在amazon EMR上运行RecommenderJob。我有一个名为SmartJukebox.jar(不可运行)的jar,它包含一个main.TrackRecommander类(就是这样)。在EMR上运行mahout RecommenderJob

我创建了罐子的作业流程:

S3N://smartjukebox/SmartJukebox.jar

和args:

main.TrackRecommander --input S3N:// smartjukebox /评级.csv --output s3n:// smartjukebox/output --usersFile s3n://smartjukebox/user.txt。

TrackRecommander类使用类RecommenderJob。

我运行作业流程和我得到这个错误日志 -

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/cf/taste/hadoop/item/RecommenderJob at 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) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:156) Caused by: java.lang.ClassNotFoundException: org.apache.mahout.cf.taste.hadoop.item.RecommenderJob at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 6 more

现在我看到JVM找不到RecommenderJob和我没有把RecommenderJob在我的罐子。我认为EMR会有内置的mahout罐子,但我找不到任何关于这个的东西。

这里有什么解决方案?

谢谢。

回答

0

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

+0

对不起,我在哪里找到他们?或者可能知道他们是什么?如果你能给出一个简短的解释,那将是很棒的。谢谢您的帮助! – 2012-07-29 12:03:15

+0

'mvn package'在您打开分发包的目录中。然后在你想要的模块下查找'target /'。 – 2012-07-29 12:26:38

0

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

检查如何创建使用在pom.xml中的Maven Assembly插件,并在src/main/resources目录的job.xml工作罐子。 如果你排除hadoop类,那么你可以在任何hadoop实例上运行它。

相关问题