【问题标题】:Nutch problems executing crawl执行爬网的 Nutch 问题
【发布时间】:2015-12-23 23:11:38
【问题描述】:

我正在尝试让 nutch 1.11 执行爬网。我正在使用 cygwin 在 Windows 7 中运行这些命令。

Nutch 正在运行,我正在通过运行 bin/nutch 获得结果,但是当我尝试运行爬网时,我不断收到错误消息。

当我尝试使用 nutch 执行爬网时出现以下错误:

错误运行:/cygdrive/c/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/bin/nutch 注入 TestCrawl/crawldb C:/Users/User5/Documents/Nutch/apache-nutch -1.11/runtime/local/urls/seed.txt

失败,退出值为 127。

我设置了我的 JAVA_HOME 类路径,并且我已更改主机文件以包含 127.0.0.1 作为 localhost。

我很好奇我是否正确调用了写入目录,如果这可能是问题所在。

完整的打印输出如下:

User5@User5-PC /cygdrive/c/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local
$ bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ C:/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/urls/ TestCrawl/  2

Injecting seed URLs
/cygdrive/c/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/bin/nutch inject TestCrawl//crawldb C:/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/urls/
Injector: starting at 2015-12-23 17:48:21
Injector: crawlDb: TestCrawl/crawldb
Injector: urlDir: C:/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/urls
Injector: Converting injected urls to crawl db entries.
Injector: java.lang.NullPointerException
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
        at org.apache.hadoop.util.Shell.run(Shell.java:418)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
        at org.apache.hadoop.util.Shell.execCommand(Shell.java:739)
        at org.apache.hadoop.util.Shell.execCommand(Shell.java:722)
        at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:633)
        at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:421)
        at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:281)
        at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125)
        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:348)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:562)
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:557)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:557)
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:548)
        at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:833)
        at org.apache.nutch.crawl.Injector.inject(Injector.java:323)
        at org.apache.nutch.crawl.Injector.run(Injector.java:379)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.nutch.crawl.Injector.main(Injector.java:369)

Error running:
  /cygdrive/c/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/bin/nutch inject TestCrawl//crawldb C:/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/urls/
Failed with exit value 127.

我认为可能与我收到的错误有关的 hadoop 日志是:

2016-01-07 12:24:40,360 ERROR util.Shell - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:318)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:333)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:326)
    at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:432)
    at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:478)
    at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170)
    at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:64)
    at org.apache.nutch.crawl.Injector.main(Injector.java:369)
2016-01-07 12:24:40,450 ERROR crawl.Injector - Injector: java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in scheme name at index 15: solr.server.url=http://localhost:8983/solr
    at org.apache.hadoop.fs.Path.initialize(Path.java:206)
    at org.apache.hadoop.fs.Path.<init>(Path.java:172)
    at org.apache.nutch.crawl.Injector.run(Injector.java:379)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.nutch.crawl.Injector.main(Injector.java:369)
Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 15: solr.server.url=http://localhost:8983/solr
    at java.net.URI$Parser.fail(URI.java:2848)
    at java.net.URI$Parser.checkChars(URI.java:3021)
    at java.net.URI$Parser.parse(URI.java:3048)
    at java.net.URI.<init>(URI.java:746)
    at org.apache.hadoop.fs.Path.initialize(Path.java:203)
    ... 4 more

【问题讨论】:

    标签: apache lucene nutch


    【解决方案1】:

    您正在从 Cygwin 运行 linux 命令,并且在 linux 系统中没有 C:\ 路径。正确的命令应该是这样的

    /cygdrive/c/Users/User5/Documents/Nutch/apache-nutch1.11/runtime/local/bin/nutch inject TestCrawl/crawldb /cygdrive/c/Users/User5/Documents/Nutch/apache-nutch1.11/runtime/local/urls/seed.txt
    

    【讨论】:

    • 感谢您帮助我解决我的错误;我没有意识到我正在这样做。
    • @JerrittPace 欢迎您。如果对您有帮助,请选择我的答案作为最佳答案。谢谢。
    • 很抱歉我试图编辑它,但我没有把它做好;我非常感谢您的帮助,并且我相信我所犯的错误会导致问题,但是修改后的命令以及没有显式调用目录的裸命令仍然会出现相同的错误: bin/crawl - i -D solr.server.url=localhost:8983/solr urls TestCrawl 2; bin/crawl -i -D /cygdrive/c/Users/User5/Documents/Nutch/apache-nutch-1.11/runtime/local/urls/ solr.server.url=localhost:8983/solrTestCrawl/ 2;这些都返回相同的错误:失败,退出值为 127。
    • 我想修改原始问题以包含 hadoop 日志
    • 老实说,我不知道我做错了什么,我在许多论坛上留言,你的是我收到的第一个答案,我非常感谢你的洞察力。我不知道我做错了什么,但是我尝试过的几乎所有事情都给了我这个错误。我似乎无法使“爬行”命令起作用
    【解决方案2】:

    您已经在此消息中回答了您的问题:

    2016-01-07 12:24:40,360 错误 util.Shell - 无法在 hadoop 二进制路径中找到 winutils 二进制文件 java.io.IOException: 无法在 Hadoop 二进制文件中找到可执行的 null\bin\winutils.exe。

    发生这种情况是因为 nutch 1.11 中包含的 hadoop 版本旨在开箱即用地在 linux 中运行,而不是在 windows 上运行。

    我有同样的情况,我最终在 ubuntu 虚拟框中使用了 nutch1.11。

    【讨论】:

      【解决方案3】:

      使用nutch时需要hadoop-corejar文件

      【讨论】:

        【解决方案4】:

        问题很明显。根据您的 hadoop 日志,它找不到 winutils.exe 文件。在 %HADOOP_HOME%/bin 文件夹中包含 winutils.exe

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多