Nutch 1.12 on Cygwin on Windows 7 - NullPointerException

Nutch 1.12 on Cygwin on Windows 7 - NullPointerException

我正在为一个工作项目努力 运行ning。目前,计划是 运行 从一台机器 (Windows 7) 抓取来自十几个网站的上下文。下面是 cygwin 的命令行输出。

$ bin/nutch inject crawl/crawldb urls
Injector: starting at 2016-10-29 09:16:37
Injector: crawlDb: crawl/crawldb
Injector: urlDir: 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.FilterFileSystem.setPermission(FilterFileSystem.java:467)
        at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:456)
        at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:424)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:906)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:887)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:849)
        at org.apache.hadoop.fs.FileSystem.createNewFile(FileSystem.java:1149)
        at org.apache.nutch.util.LockUtil.createLockFile(LockUtil.java:58)
        at org.apache.nutch.crawl.Injector.inject(Injector.java:357)
        at org.apache.nutch.crawl.Injector.run(Injector.java:467)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.nutch.crawl.Injector.main(Injector.java:441)

查看源代码,这里是 org.apache.nutch.crawl.Injector 的第 440 到 443 行:

  public static void main(String[] args) throws Exception {
    int res = ToolRunner.run(NutchConfiguration.create(), new Injector(), args);
    System.exit(res);
  }

目前还不清楚到底是 NutchConfiguration.create() 还是新的 Injector() 在那里失败了。我根据 nutch 网站上的教程设置我的安装。我在文件 ./urls/seed.txt 中放了一个包含 3 个网址的列表,每行 1 个;并编辑了 ./conf/nutch-site.xml.

对 investigation/debugging 的任何建议,我们将不胜感激。 谢谢!

我遇到了同样的问题。通过在机器中设置 Hadoop 并在 %HADOOP%/bin.

中包含 winutils.exe 来解决它

然后会得到java.lang.UnsatisfiedLinkError error。要解决这个问题,请在 %NUTCH_HOME%/runtime/local/bin 中打开 nutch 文件并在行下方评论

if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then
  NUTCH_OPTS=("${NUTCH_OPTS[@]}" -Djava.library.path="$JAVA_LIBRARY_PATH")
fi

好的,在这里有些挣扎之后是让 hadoop 与 cygwin/windows 一起工作的最后步骤。

  1. 根据hadoop版本从https://github.com/cdarlint/winutils的文件夹bin下下载正确版本的winutils.exe和hadoop.dll

  2. 设置HADOOP_HOME为上面bin文件夹的下载目录。 (注意如果上面两个文件是下载到目录D:\winutil\bin那么HADOOP_HOME = D:\winutil)

  3. 确保将 D:\winutil\bin 添加到 windows 的 PATH 变量中。这一步现在很重要(不久前)。