Nutch的Windows中:无法设置路径的权限(Nutch in Windows: Failed

2019-08-17 07:09发布

我在Windows计算机上尝试用户的Solr与Nutch的,我发现了以下错误:

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

从大量的线程我了解到,那至极的Hadoop似乎被Nutch的使用做了一些搭配chmod魔力,将UNIX机器上工作,但无法在Windows。

存在现在一年多了这个问题。 我发现一个线程,其中示出的代码行,并提出一个修补。 我真的只放置了一个谁拥有这个问题? 是否所有的人创造一个自定义生成为了在Windows上运行Nutch的? 或者是有一些选项来禁用Hadoop的东西或其他解决方案? 也许另一个履带比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)

Answer 1:

我花了一段时间来得到这个工作,但这里是它的1.7 Nutch的工程解决方案。

  1. 下载Hadoop的核心0.20.2从Maven仓库
  2. 更换$NUTCH_HOME/lib/hadoop-core-1.2.0.jar与下载的文件具有相同的名称重新命名它。

这应该是它。

说明

此问题是由Hadoop的,因为它假设你在UNIX上运行,并通过文件权限规则遵守造成的。 这个问题在2011年实际上是解决了,但Nutch的没有更新他们使用的Hadoop版本。 相关的修补程序是在这里和这里



Answer 2:

我们正在使用的Nutch过,但它不支持在Windows上运行,在Cygwin,你有,像MapReduce的过我们的1.4版本有类似的问题。

我们解决它通过使用与Ubuntu虚拟机(虚拟盒)和Windows和Linux之间的共享目录中,我们可以开发和建立在Windows和Linux上运行的Nutch(爬行)。



Answer 3:

我有窗户,没有自定义生成运行的Nutch。 这是因为我没有,虽然它使用很长一段时间。 但有一两件事,我花了一段时间来赶上,是你需要为Windows管理员以获取必要的权利Cygwin的运行。



Answer 4:

我提出一个不同的方法。 检查此链接了。 它说明了如何吞下Windows上的错误,并且不需要您降级的Hadoop或重建的Nutch。 我对Nutch的2.1测试,但它也适用于其他的版本。 我还做了一个简单的蝙蝠开始履带和索引 ,但它是为Nutch的2.x中,可能并不适用于Nutch的1.x的

为子孙后代着想,该方法需要:

  1. 制作一个定制LocalFileSystem实现:

     public class WinLocalFileSystem extends LocalFileSystem { public WinLocalFileSystem() { super(); System.err.println("Patch for HADOOP-7682: "+ "Instantiating workaround file system"); } /** * Delegates to <code>super.mkdirs(Path)</code> and separately calls * <code>this.setPermssion(Path,FsPermission)</code> */ @Override public boolean mkdirs(Path path, FsPermission permission) throws IOException { boolean result=super.mkdirs(path); this.setPermission(path,permission); return result; } /** * Ignores IOException when attempting to set the permission */ @Override public void setPermission(Path path, FsPermission permission) throws IOException { try { super.setPermission(path,permission); } catch (IOException e) { System.err.println("Patch for HADOOP-7682: "+ "Ignoring IOException setting persmission for path \""+path+ "\": "+e.getMessage()); } } } 
  2. 编译它,并在放置JAR ${HADOOP_HOME}/lib

  3. 然后通过修改其注册${HADOOP_HOME}/conf/core-site.xml

    fs.file.impl com.conga.services.hadoop.patch.HADOOP_7682.WinLocalFileSystem启用的问题HADOOP-7682补丁的Windows



Answer 5:

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



文章来源: Nutch in Windows: Failed to set permissions of path