nutch:未能设置路径的权限

rmbxnbpk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(365)

我试图在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

从我学到的很多线索中,hadoop似乎是nutch使用的,它做了一些工作 chmod 可以在unix机器上工作,但不能在windows上工作的魔术。
这个问题已经存在一年多了。我找到了一个线程,其中显示了代码行并提出了修复方案。我真的是唯一一个有这个问题的人吗?所有其他人都在创建自定义版本以便在windows上运行nutch吗?或者有什么选项可以禁用hadoop或者其他解决方案?也许是另一个爬虫比坚果?
以下是我所做工作的堆栈跟踪:

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)
nr7wwzry

nr7wwzry1#

我在windows上运行nutch,没有自定义版本。但我好久没用了。但有一件事我花了一段时间才明白,那就是你需要以windows管理员的身份运行cygwin才能获得必要的权限。

ohtdti5x

ohtdti5x2#

我花了一段时间来让它工作,但这里有一个解决方案,它适用于坚果1.7。
从maven存储库下载hadoopcore0.20.2
替换 $NUTCH_HOME/lib/hadoop-core-1.2.0.jar 将下载的文件重命名为相同的名称。
应该是这样。
解释
这个问题是由hadoop引起的,因为它假定您在unix上运行并且遵守文件权限规则。这个问题在2011年得到了解决,但nutch并没有更新他们使用的hadoop版本。相关的修复程序在这里和这里

pdtvr36n

pdtvr36n3#

我们也在使用nutch,但它不支持在windows上运行,在cygwin上,我们的1.4版本也有类似的问题,比如mapreduce。
我们通过在ubuntu中使用虚拟机(virtualbox)和windows与linux之间的共享目录来解决这个问题,这样我们就可以在windows上开发和构建,在linux上运行nutch(crawling)。

kknvjkwl

kknvjkwl4#

您必须更改项目依赖项hadoop核心和hadoop工具。我使用的是0.20.2版本,工作正常。

wqnecbli

wqnecbli5#

我建议另一种方法。查看此链接。它解释了如何在windows上消除错误,并且不需要您降级hadoop或重建nutch。我在nutch2.1上进行了测试,但它也适用于其他版本。我还做了一个简单的.bat来启动爬虫程序和索引器,但是它是为nutch2.x准备的,可能不适用于nutch1.x。
为子孙后代着想,这一方法包括:
定制 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());
        }
    }
}

编译它并将jar放在 ${HADOOP_HOME}/lib 然后通过修改 ${HADOOP_HOME}/conf/core-site.xml :
fs.file.impl com.conga.services.hadoop.patch.hadoop_.winlocalfilesystem在windows上启用针对问题hadoop-7682的修补程序

相关问题