- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试在 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”。
谢谢
阿杰
最佳答案
你试过了吗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 中创建一个符号链接(symbolic link),但并不顺利。例如
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.lang 检查一切是否正确。应该返回 /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
包括只有您感兴趣的网站。否则,您最终会在磁盘上看到“Internet”。
关于windows - 在 Windows 7 中使用 nutch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018187/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!