hadoop如何从 map 作业生成输入

标签 hadoop

我需要 Map 作业生成一组输入记录,这些记录应该被馈送到 Map 作业(通过 JobTracker?)。

我想不出解决办法,需要你的帮助。

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

最佳答案

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

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

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

关于hadoop如何从 map 作业生成输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083113/

相关文章:

java.lang.NoClassDefFoundError 与 HBase 扫描

java - 使用 native 协议(protocol)的 Cassandra 自定义 map-reduce 输入格式化程序

json - 配置单元 : How to explode a JSON column with an array, 并嵌入到 CSV 文件中?

rest - WebHDFS在Hortonworks中给出错误

Maven 无法解析依赖关系 spark

hadoop - 我如何将reduce的输出用作其他作业的来源

linux - Hadoop Streaming 没有正确编码字符

hadoop hbase cdh4 作业启动失败,出现权限错误

mysql - 按 unix 时间戳的 Hive 动态分区

hadoop - Hadoop fs -ls引发错误