2

我需要 Map 作业生成一组输入记录,这些记录应该提供给 Map 作业(通过 JobTracker?)。

我想不出解决方案,需要您的帮助。

更多细节:我打算写网络爬虫。初始根级网页将输入到 mapreduce 作业。Mapper/reducer 将获取网页并从页面收集链接。这些链接应被视为 mapreduce 作业的输入。所以我想将这些链接推送到jobtracker,以便可以像对第一个根节点所做的那样处理它们。我们可以添加一些终端条件(例如链接正则表达式匹配)。如果正则表达式匹配,则它不会被 map(或 reduce)任务放回 jobtracker。

4

1 回答 1

0

构建您的作业,以便映射器获取 URL 列表并为每个 URL 运行一堆爬虫。因此,您的第一次提交将是一个只有一个 URL 的文件。映射器的输出将是在页面上找到的链接列表。reducer 只会将映射器的输出合并到一个文件中。

实现此功能后,您可以使用上一个作业的输出开始下一个作业。在第一阶段,您将只运行映射器,因为您的 URL 列表将非常短,但最终您将能够利用整个集群。您可以尝试更改 HDFS 块大小以获得最佳利用率。或者,您可以简单地将最初的未充分利用视为启动成本,随着您的工作进展而消失。此外,如果您在 AWS 上运行,这对您来说可能是一件好事,因为您可以从非常小的集群开始,然后购买更多机器来加入您的集群。

此设置有一个陷阱,您需要注意不要访问您已经访问过的链接。如果 URL 列表很小,这可能很容易,但如果您尝试爬取整个互联网,则需要一些巧妙的解决方案。

于 2013-02-26T19:30:50.187 回答