我需要Map作业生成一组输入记录,这些记录应该输入Map作业(通过JobTracker?)。
我无法想出解决方案,需要你的帮助。
更多细节: 我打算写网络爬虫。初始根级别网页将输入到mapreduce作业。 Mapper / reducer将获取网页并从页面收集链接。应将这些链接视为mapreduce作业的输入。所以我想将这些链接推送到jobtracker,以便可以像处理第一个根节点那样处理它们。我们可以添加终端条件(例如链接正则表达式匹配)。如果正则表达式匹配,那么它将不会通过map(或reduce)任务返回到jobtracker。
答案 0 :(得分:0)
构建您的作业,以便映射器获取URL列表并为每个URL运行一堆爬虫。因此,您的第一个提交将是一个只有一个URL的文件。映射器的输出将是页面上找到的链接列表。 reducer将把映射器输出组合成一个文件。
实施此功能后,您可以使用上一个作业的输出开始下一个作业。在第一阶段,您将只运行映射器,因为您的URL列表将非常短,但最终您将能够利用整个集群。您可以尝试更改HDFS块大小以获得最佳利用率。或者,您可以简单地将初始利用不足视为启动成本,随着您的工作进展而消失。此外,如果您在AWS上运行,对您来说可能是一件好事,因为您可以从非常小的群集开始,并购买更多的计算机来加入您的群集。
此设置存在问题,您需要注意不要访问您已访问过的链接。如果URL列表很小,这可能非常简单,但如果您尝试抓取整个互联网,则需要一些聪明的解决方案。