4

我在具有 3 个工作节点的 Elastic MapReduce 上运行 Nutch。我正在使用 Nutch 1.4,它附带的默认配置(在添加用户代理之后)。

但是,即使我正在爬取包含 30,000 个域的列表,但获取步骤仅从一个工作节点运行,即使解析步骤在所有三个节点上都运行。

如何让它从所有三个节点运行 fetch 步骤?

*编辑* 问题是我需要将 mapred.map.tasks 属性设置为我的 Hadoop 集群的大小。您可以在此处找到此文档

4

1 回答 1

3

默认情况下,nutch 根据其主机对 url 进行分区。中对应的属性nutch-default.xml为:

<property>
  <name>partition.url.mode</name>
  <value>byHost</value>
  <description>Determines how to partition URLs. Default value is 'byHost', 
  also takes 'byDomain' or 'byIP'. 
  </description>
</property>

请验证您的设置中的值。

我认为您的问题可以通过获得以下问题的答案来诊断:

  1. 为获取作业创建了多少映射器?有可能产生了多个映射器,并且所有映射器都提前完成,除了一个。
  2. 生成命令中使用的topN 值是多少?如果这个值很低,那么尽管有 30K 页面,但发送到获取阶段的页面将非常少。
  3. 您是否在生成命令中使用了numFetchers 选项?这控制为获取作业创建的地图数量。
  4. 为 generate-partition 作业生成了多少个 reduce?如果该值为 1,则在 fetch 阶段只会创建一个映射。生成分区的输出被提供给获取阶段。generate(即生成的 reducers)创建的零件文件数等于为 fetch 作业创建的映射数。
  5. 你的 hadoop 上 mapred.map.tasks 的设置是什么?reduce 的对应值是多少?
于 2012-04-22T09:27:50.487 回答