Jar 在EMR上运行mahout RecommenderJob

Jar 在EMR上运行mahout RecommenderJob,jar,mahout,amazon-emr,emr,Jar,Mahout,Amazon Emr,Emr,我正试图在amazon EMR上运行一个RecommenderJob。我有一个名为SmartJukebox.jar(不可运行)的jar,它包含一个类main.TrackRecommander(就是这样) 我用jar创建了一个作业流: s3n://smartjukebox/smartjukebox.jar 和args: main.TrackRecommander--输入s3n://smartjukebox/ratings.csv--输出s3n://smartjukebox/output--用户文件

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

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

s3n://smartjukebox/smartjukebox.jar

和args:

main.TrackRecommander--输入s3n://smartjukebox/ratings.csv--输出s3n://smartjukebox/output--用户文件s3n://smartjukebox/user.txt

类TrackRecommander使用类RecommenderJob

我运行作业流,并在错误日志中获取此信息-

线程“main”java.lang.NoClassDefFoundError中出现异常:org/apache/mahout/cf/taste/hadoop/item/RecommenderJob main.TrackRecommander.main(TrackRecommander.java:136) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在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) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:190) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:306) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 还有6个

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

这里的解决方案是什么


谢谢。

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

您需要创建一个作业JAR,其中包含代码运行所需的所有类,其中也包括Mahout类。 看看

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

很抱歉不知道,但我在哪里可以找到它们?或者可能得到关于它们是什么的线索?如果你能给我一个简单的解释就好了。谢谢你的帮助<代码>mvn软件包在您解压缩分发版的目录中。然后查看所需模块下的
target/