0

我是 HDInsight 的新手。我想学习和练习机器学习,HDInsight 正是我想要的,但似乎没有直接的 API 可以用于 mahout。由于 mahout 推荐本质上会转化为 mapredure 作业,所以我按照 Windows Azure 文档中的一些 mapreduce 示例编写了以下代码:</p>

// Define the MapReduce job
MapReduceJobCreateParameters mrJobDefinition = new MapReduceJobCreateParameters()
{
    JarFile = "wasb:///example/jars/mahout-core-0.9-job.jar",
    ClassName = "org.apache.mahout.cf.taste.hadoop.item.RecommenderJob",
};

mrJobDefinition.Arguments.Add(" -s SIMILARITY_COOCCURRENCE");
mrJobDefinition.Arguments.Add(" --input=/reply");
mrJobDefinition.Arguments.Add(" --output=/recommend/");
mrJobDefinition.Arguments.Add(" --usersFile=/data/users.txt");

我已经将“mahout-core-0.9-job.jar”上传到指定 Azure blob 存储容器中的 /example/jars。

但我收到以下错误消息:

14/04/03 12:04:28 错误security.UserGroupInformationPriviledgedActionException as:johnny 原因:java.io.IOException:异常读取文件:/c:/apps/temp/hdfs/mapred/local/taskTracker/johnny/jobcache /job_201404031203_0001/jobToken= java.security.PrivilegedActionException: java.io.IOException: 异常读取文件:/c:/apps/temp/hdfs/mapred/local/taskTracker/johnny/jobcache/job_201404031203_0001/jobToken= 在 java.security.AccessController.doPrivileged(Native方法)在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1233) 在 org.apache.hadoop.mapred.JobClient.submitJobInternal (JobClient.java:951) 在 org.apache.hadoop.mapreduce.Job.submit(Job.java:550) 在 org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580) 在 org.apache。 mahout.cf.taste.hadoop.preparation.PreparePreferenceMatrixJob.run(PreparePreferenceMatrixJob.java:77) 在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 在 org.apache.mahout.cf.taste。 hadoop.项目。RecommenderJob.run(RecommenderJob.java:164) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.main(RecommenderJob. java:322) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang .reflect.Method.invoke(Method.java:601) at org.apache.hadoop.util.RunJar.main(RunJar.java:160) 原因:java.io.IOException: 异常读取文件:/c:/apps /temp/hdfs/mapred/local/taskTracker/johnny/jobcache/job_201404031203_0001/jobToken= 在 org.apache.hadoop.security.Credentials.readTokenStorageFile(Credentials.java:136) 在 org.apache.hadoop.mapred.JobClient。readTokensFromFiles(JobClient.java:2149) at org.apache.hadoop.mapred.JobClient.populateTokenCache(JobClient.java:2185) at org.apache.hadoop.mapred.JobClient.access$300(JobClient.java:179) at org. apache.hadoop.mapred.JobClient$2.run(JobClient.java:964) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:951) ... 16 更多原因:java.io.FileNotFoundException:文件文件:/c:/apps/temp/hdfs/mapred/local/taskTracker/johnny/jobcache/job_201404031203_0001/jobToken=不存在. 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:427) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:254) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker .(ChecksumFileSystem.java:125) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:436) 在 org.apache .hadoop.security.Credentials.readTokenStorageFile(Credentials.java:130) ... 21 更多线程“主”java.io.IOException 中的异常:异常读取文件:/c:/apps/temp/hdfs/mapred/local/ taskTracker/johnny/jobcache/job_201404031203_0001/jobToken= 在 org.apache.hadoop.security.Credentials.readTokenStorageFile(Credentials.java:136) 在 org.apache.hadoop.mapred.JobClient。java.io.FileNotFoundException:文件文件:/c:/apps/temp/hdfs/mapred/local/taskTracker/johnny/jobcache/job_201404031203_0001/jobToken=不存在。在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:427) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:254) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker .(ChecksumFileSystem.java:125) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:436) 在 org.apache .hadoop.security.Credentials.readTokenStorageFile(Credentials.java:130) ... 21 更多强制关闭观察者/保持活动线程池 Templeton:作业失败,退出代码为 1

在我在互联网上搜索后,似乎应该对 mapred-site.xml 或其他 hadoop 配置文件进行一些更改。但我对 Apache hadoop 完全陌生,对 Linux 和 Java 了解不多。

任何帮助或指导将不胜感激。

4

1 回答 1

0

使用适用于 Hadoop 的最新 .NET SDK ( http://hadoopsdk.codeplex.com/ ),我可以使用相同的代码成功提交 mahout 作业。SDK似乎已经解决了这个问题。

于 2014-05-28T07:23:53.960 回答