Windows中的Nutch:无法设置path的权限

我试图在Windows机器上用Nutch与Solr用户,我得到以下错误:

Exception in thread "main" java.io.IOException: Failed to set permissions of path: c:\temp\mapred\staging\admin-1654213299\.staging to 0700 

从我学到的很multithreading来看,这个似乎被nutch使用的hadoop会使用unix机器上的一些chmod魔术,而不是在windows上。

这个问题已经存在了一年多了。 我find了一个线程,在那里显示了代码行并提出了一个修正。 我真的是他们中唯一一个有这个问题的人吗? 所有其他人创build一个自定义生成,以便在Windows上运行nutch吗? 或者是否有一些选项来禁用hadoop的东西或其他解决scheme? 也许另一个爬行者比nutch?

非常感谢。 鲍里斯

这里是我正在做的堆栈跟踪….

  admin@WIN-G1BPD00JH42 /cygdrive/c/solr/apache-nutch-1.6 $ bin/nutch crawl urls -dir crawl -depth 3 -topN 5 -solr http://localhost:8080/solr-4.1.0 cygpath: can't convert empty path crawl started in: crawl rootUrlDir = urls threads = 10 depth = 3 solrUrl=http://localhost:8080/solr-4.1.0 topN = 5 Injector: starting at 2013-03-03 17:43:15 Injector: crawlDb: crawl/crawldb Injector: urlDir: urls Injector: Converting injected urls to crawl db entries. Exception in thread "main" java.io.IOException: Failed to set permissions of path: c:\temp\mapred\staging\admin-1654213299\.staging to 0700 at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689) at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189) at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Unknown Source) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850) at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:824) at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1261) at org.apache.nutch.crawl.Injector.inject(Injector.java:281) at org.apache.nutch.crawl.Crawl.run(Crawl.java:127) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.nutch.crawl.Crawl.main(Crawl.java:55) 

我花了一段时间才得到这个工作,但这是在nutch 1.7上工作的解决方案。

  1. 从MVN存储库下载Hadoop Core 0.20.2
  2. 替换(nutch目录)/lib/hadoop-core-1.2.0.jar与下载的文件重命名相同的名称。

应该是这样的。

说明

这个问题是由hadoop引起的,因为它假定你在unix上运行并且遵守文件权限规则。 这个问题实际上在2011年得到了解决,但是nutch没有更新他们使用的hadoop版本。 相关的修补程序在这里和这里

我们也使用Nutch,但不支持在Windows上运行,在Cygwin上我们的1.4版本也有类似的问题,比如mapreduce。

我们通过使用Ubuntu的vm(Virtual box)和Windows与Linux共享的目录解决了这个问题,所以我们可以在Windows上开发和构建,在Linux上运行Nutch(抓取)。

我有Nutch在Windows上运行,没有自定义构建。 因为我还没有使用它很长一段时间。 但有一件事花了我一段时间才得到,是你需要运行cygwin作为Windows管理员来获得必要的权利。

我建议一个不同的方法。 检查这个链接了。 它解释了如何吞咽Windows上的错误,并不要求您降级Hadoop或重建Nutch。 我在Nutch 2.1上测试过,但也适用于其他版本。 我也做了一个简单的.bat用于启动爬虫和索引器 ,但它是为Nutch 2.x,可能不适用于Nutch 1.x.

你必须改变项目依赖hadoop核心和hadoop工具。 我正在使用0.20.2版本,工作正常。