我需要map作业生成一组输入记录,这些记录应该被提供给map作业(通过jobtracker?)。
我想不出解决办法,需要你的帮助。
更多细节:我计划写网络爬虫。初始根级别的网页将被输入到mapreduce作业。mapper/reducer将获取网页并从该网页收集链接。这些链接应视为mapreduce作业的输入。因此,我想将这些链接推送到jobtracker,以便它们可以像处理第一个根节点一样进行处理。我们可以添加一些终端条件(例如链接正则表达式匹配)。如果regex匹配,那么它将不会被map(或reduce)任务放回jobtracker。
1条答案
按热度按时间aor9mmx11#
构造你的作业,这样一个Map器将获取一个url列表,并为每个url运行一组爬虫程序。因此,您的第一次提交将是一个只有一个url的文件。Map器的输出将是页面上找到的链接列表。reducer将把mappers输出合并到一个文件中。
实现此功能后,可以使用上一个作业的输出开始下一个作业。在第一阶段,您将只运行mapper,因为您的url列表将非常短,但最终您将能够利用整个集群。您可以尝试更改hdfs块大小以获得最佳利用率。或者,您可以简单地将初始利用率不足视为启动成本,随着工作的进展,这一成本将随之消失。此外,如果您运行的是aws,这对您来说可能是一件好事,因为您可以从非常小的集群开始,购买更多的机器来加入您的集群。
此设置有问题,请注意不要访问已访问的链接。如果URL列表很小,这可能非常容易,但是如果您尝试爬网整个internet,则需要一些聪明的解决方案。