我正在尝试在亚马逊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罐子,但我找不到任何相关内容。
这里有什么解决方案?
感谢。
答案 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实例上运行它。