1

我正在尝试在亚马逊 EMR 上运行 RecommenderJob。我有一个名为 SmartJukebox.jar(不可运行)的 jar,它包含一个 main.TrackRecommander 类(仅此而已)。

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

s3n://smartjukebox/SmartJukebox.jar

和参数:

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

TrackRecommander 类使用 RecommenderJob 类。

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

在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法)在 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 at java.net.URLClassLoader$1。在 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 罐子,但我找不到任何相关信息。

这里的解决方案是什么?

谢谢。

4

2 回答 2

0

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

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

于 2014-03-11T11:50:43.090 回答
0

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

于 2012-07-29T11:37:43.497 回答