你尝试过从Nutch Wiki中获取有关Windows的运行信息吗?GettingNutchRunningWithWindows
我的一些学生进行了许多实验,以下是他们工作的结果:
使用nutch 1.7进行测试 - http://www.apache.org/dyn/closer.cgi/nutch/1.7/apache-nutch-1.7-bin.zip
您还需要安装cygwin。
1)将nutch提取到没有空格的路径中。例如:
d:\dev\ir\nutch-1.7
2)将JDK复制到没有空格的某个位置。我尝试在Cygwin中创建符号链接,但效果不佳。例如:
xcopy /S "C:\Program Files\Java\jdk1.7.0_21" c:\jdk1.7.0_21
3) 在cygwin中设置Java路径
3.1) export JAVA_HOME=/cygdrive/c/jdk1.7.0_21
3.2) export PATH=$JAVA_HOME/bin:$PATH
3,3) 通过调用which java检查所有是否正确。应返回/cygdrive/c/jdk1.7.0_21/bin/java
到目前为止 - 已解决第一个问题 - 错误的Java路径。现在进入第二个问题 - hadoop修补程序。
4) 修补hadoop
https://issues.apache.org/jira/browse/HADOOP-7682
https://github.com/congainc/patch-hadoop_7682-1.0.x-win
简而言之:
- 将
patch-hadoop_7682-1.0.x-win.jar
放置在
d:\dev\ir\nutch-1.7\lib
目录下。
- 编辑
d:\dev\ir\nutch-1.7\conf\nutch-site.xml
文件并添加以下内容:
<property>
<name>fs.file.impl</name>
<value>com.conga.services.hadoop.patch.HADOOP_7682.WinLocalFileSystem</value>
<description>Enables patch for issue HADOOP-7682 on Windows</description>
</property>
5) Hadoop临时目录 - 我不确定这是否是必要的(在应用之前请尝试),因为我在应用补丁之前就已经添加了它,但在我的 d:\ dev \ ir \ nutch-1.7 \ conf \ nutch-site.xml
中有
<property>
<name>hadoop.tmp.dir</name>
<value>C:\tmp\asd</value>
</property>
6) Hadoop版本 - 我不确定这是否必要(在应用之前请先尝试),我将Hadoop降级到了hadoop-core-0.20.205.0.jar,在找到补丁之前,我的设置仍然保持不变。如果您认为这是必要的,可以在此处找到:http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core/0.20.205.0
6.1) 将hadoop-core-1.2.1.jar
从d:\dev\ir\nutch-1.7\lib
移动到某个位置进行备份
6.2) 下载hadoop-core-0.20.205.0.jar
到d:\dev\ir\nutch-1.7\lib
7) 一些爬虫优化。如果你需要爬取很多网站,不要从一个庞大的url列表、大深度和topN开始爬取。如果这样做,你会发现nutch会按顺序逐个从同一站点抓取链接,并在抓取之间等待5秒钟。原因是深度30和topN 200很可能只会填满第一个抓取队列,而且默认情况下,nutch配置为不从同一站点使用多个线程进行抓取。所以你注定要等待很长时间。
7.1) 要解决这个问题,首先运行几次小深度和topN的爬取 - 例如
bin/nutch crawl urls -dir crawl -depth 3 -topN 4
这将填充生成的抓取队列,包括来自多个站点的url。
7.2) 然后您可以尝试使用大规模爬网。
bin/nutch crawl urls -dir crawl -depth 20 -topN 150
7.3.) 为了允许一些多线程操作,请将以下内容添加到您的 nutch-site.xml
文件中。这将允许多个线程同时从同一主机获取。
注意! 在使用这些属性之前,请在互联网上阅读其含义。
<property>
<name>fetcher.threads.fetch</name>
<value>16</value>
</property>
<property>
<name>fetcher.threads.per.queue</name>
<value>4</value>
</property>
<property>
<property>
<name>fetcher.queue.mode</name>
<value>byDomain</value>
</property>
<name>fetcher.threads.per.host</name>
<value>8</value>
<description></description>
</property>
<property>
<name>fetcher.verbose</name>
<value>true</value>
</property>
<property>
<name>fetcher.server.min.delay</name>
<value>5.0</value>
<description>applicable ONLY if fetcher.threads.per.host is greater than 1 (i.e. the host blocking is turned off).</description>
</property>
</configuration>
注意:当你爬取大量的网站时,请确保你的D:\Dev\id\apache-nutch-1.7\conf\regex-urlfilter.txt
文件中只包含你感兴趣的网站。否则,你将在你的硬盘上得到“互联网”。