【问题标题】:Nutch 1.12 on Cygwin on Windows 7 - NullPointerExceptionWindows 7 上 Cygwin 上的 Nutch 1.12 - NullPointerException
【发布时间】:2016-10-29 18:29:55
【问题描述】:

我正在努力让 nutch 首次为一个工作项目运行。目前,计划是在单台机器(Windows 7)上运行 nutch,以从十几个网站上抓取上下文。下面是 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() 还是 new Injector() 失败了。我根据 nutch 网站上的教程设置了我的安装。我在文件 ./urls/seed.txt 中列出了 3 个 url,每行 1 个;并编辑了 ./conf/nutch-site.xml。

任何有关调查/调试的建议将不胜感激。 谢谢!

【问题讨论】:

  • 在搜索所有源代码后,似乎 org.apache.hadoop.fs.FileSystem 不包含在二进制分发中。所以我的下一步将是下载并安装 hadoop 并将其库包含在类路径中以运行 nutch。我会告诉你情况如何。
  • 安装 hadoop 并将 hadoop jar 添加到类路径后,命令行结果没有变化。到其他想法。 Nutch 的 hadoop 日志显示定位可执行文件 null\bin\winutils.exe 时出现问题。我看到还有其他关于这个的 stackoverflow 问题和 cmets。我会探索那条路线。
  • 关于winutils.exe的问题有一个很好的问答:(stackoverflow.com/questions/35652665/…)
  • 为方便起见,这里是 hadoop 无法定位 winutils.exe 的最终解决方案: A. 从public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe 下载 winutils.exe B. 使用 Windows 控制面板 > 系统 > 设置您的 HADOOP_HOME 环境变量高级系统设置 > HADOOP_HOME 的环境变量 = C:\winutils 假设文件本身位于:C:\winutils\bin\winutils.exe 解决此问题后,java.lang.UnsatisfiedLinkError 现在出现错误。我已经看到了这方面的帖子,并将继续使用该路线。
  • 您最终解决了这个问题吗?我刚刚开始按照您所说的进行操作,并且遇到了同样的问题。

标签: nullpointerexception cygwin nutch


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。通过在机器中设置 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
    

    【讨论】:

      猜你喜欢
      • 2015-03-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
      相关资源
      最近更新 更多