【发布时间】: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