【问题标题】:Why does Nutch only run the fetch step on one Hadoop node, when the cluster has 5 nodes total?当集群总共有 5 个节点时,为什么 Nutch 只在一个 Hadoop 节点上运行 fetch 步骤?
【发布时间】:2012-04-22 00:19:16
【问题描述】:

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

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

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

*EDIT* 问题是我需要将 mapred.map.tasks 属性设置为我的 Hadoop 集群的大小。你可以找到这个记录在案的here

【问题讨论】:

    标签: hadoop nutch elastic-map-reduce


    【解决方案1】:

    默认情况下,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(即生成的 reducer)创建的零件文件数等于为 fetch 作业创建的映射数。
    5. 你的 hadoop 上 mapred.map.tasks 的设置是什么? reduce 对应的值是多少?

    【讨论】:

    • 1) 似乎只为获取步骤生成了 1 个映射器 2) 我没有指定 topN 3) numFetchers 选项似乎对 Crawl 类无效,在 nutch-1.4.job 存档中 4) 大约 200 5) 我没有设置值,所以它只是 EMR 的默认值。
    • 如果如您在第 4 步中提到的生成分区作业中只有一个 reducer 怎么办?我也在这样一种情况下运行,即 fetch 仅在单个 map 任务中运行,并且在生成分区作业中之前有一个 reducer。如何强制 Nutch 在多个地图任务中进行 fetch,是否有设置在生成分区作业中强制多个减速器?
    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多