为什么 Nutch 只在一个 Hadoop 节点上运行获取步骤,而集群总共有 5 个节点



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

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

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

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

默认情况下,

坚果分区基于其主机的 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. 为生成分区作业生成了多少个缩减?如果此值为 1,则在获取阶段只会创建一个映射。生成分区的输出被提供给获取阶段。生成创建的零件文件数(即用于生成的化简器)等于为获取作业创建的映射数。
  5. 在你的hadoop上mapred.map.tasks的设置是什么?reduce的相应值是多少?