我正在尝试从Windows环境中使用nutch 1.6,但每次尝试按照网站Nutch Tuorial Apache中给出的程序运行时,我总是会遇到以下异常:
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-ajayn\mapred\staging\ajayn-1231695575\.staging to 0700
我一直在网上广泛搜索,但没有具体的解决方案。请注意,我没有在系统中安装或运行hadoop实例,我的唯一目的是试用nutch作为网络爬行代理。
甚至可以在Windows中运行nutch 1.6,如果是的话,还有关于如何处理它的指针并避免上述异常。
PS:如果有帮助,/ tmp /文件夹附加了一个只读属性,即使您尝试这样做也不会改变。同样来自cygwin我试图设置文件权限777,但每次我尝试运行nutch实例时,都会创建一个新文件夹,例如:“ajayn-1231695575”,它没有任何执行权。
由于
的Ajay
答案 0 :(得分:1)
您是否尝试过GettingNutchRunningWithWindows from the Nutch Wiki?
我的一些学生经历了很多实验,这是他们工作的结果:
使用 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)通过调用哪个java来检查一切是否正确。应该返回/cygdrive/c/jdk1.7.0_21/bin/java
SO FAR - 修复了第一个问题 - 使用了不正确的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 temp dir - 我不确定这是否有必要(在应用之前尝试),因为我在应用补丁之前添加了它,但是在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)一些爬行优化。如果您需要抓取大量网站,请不要开始抓取大量网址,以及大深度和topN。 如果你这样做,你会看到nutch从同一个站点依次提取一个链接,在提取之间等待5秒。 原因是深度30和topN200最有可能仅使用来自同一站点的链接填充第一个获取队列。 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
仅包含您感兴趣的网站。否则,您最终会在磁盘上显示“Internet”。
答案 1 :(得分:0)
我们遇到了同样的问题,直到Nutch 1.3,我们建议使用带虚拟盒的ubuntu vm环境进行开发和共享目录,这样你就可以在Windows上使用ide开发并部署到你的vm并在Linux上运行Nutch。