MapReduce和从外部源下载文件

时间:2012-08-15 01:13:57

标签: java http ftp hadoop mapreduce

我有一个项目,要求从外部源以分布式方式下载文件。我们已经在Hadoop上投入了大量资金并且希望利用MapReduce - 但更多的是作为分布式任务而不是ETL。

1)之前有没有人这样做过?

2)是否只有没有Reducer的Mapper?

3)将FTP / HTTP连接的抽象实现传递给Mapper的最佳方法是什么? - 为了清楚起见,我得到的是我想要一个好的方法来进行单元测试而不进行集成测试,因此需要一种方法来模拟FTP / HTTP。

4)MapReduce是这种类型的最佳方法吗? - 我们滥用MapReduce吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

这听起来'类似于Nutch所做的(虽然我对Nutch的熟悉程度并不太熟悉)。

观察的一些观点:

  • 如果您有多个由同一服务器托管的URL,您实际上可以通过主机名进行分区,然后在Reducer中进行拉取(取决于您从中提取的URL数量),从中受益。
  • 如果内容是“可以安排的”,并且您将一遍又一遍地使用相同的网址,那么您可以'从您的hadoop集群和互联网之间放置一个缓存/代理服务器(您的公司和ISP可能/应该已经/应该这样做)。虽然如果您要访问唯一的URL或内容是动态的,这实际上会阻碍您,因为您在缓存/代理服务器中只有一个瓶颈

答案 1 :(得分:2)

我认为你应该看看Storm。它是一个可扩展的框架,对于从许多不同来源收集数据非常有用。这正是你想要做的。仍然可以使用map reduce完成处理,但对于实际的集合,您应该使用像Storm这样的框架。

答案 2 :(得分:1)

我认为您的互联网连接很容易成为这种情况的瓶颈,但我确信可以做到。

  1. 我没有做过这个确切的事情但是必须从我的Mapper进行Web服务调用,以从第三方API获取一些元数据以进行进一步处理。第三方Web服务很快成为瓶颈,并减慢了一切。
  2. 是的,因为在这种情况下没有什么可以减少的(我假设您只想将下载的文件保存在某处)。
  3. 我会在HDFS中保存FTP / HTTP网址,并将您的Mapper读入HDFS的网址。
  4. 我非常怀疑MapReduce是这类事物的最佳方法。就像我已经说过的那样,我认为你的互联网连接很容易成为瓶颈,你将无法扩展你的MR程序。下载(并保存在HDFS中)后,如果您想使用MapReduce处理数据,那将是一个不同的故事。是的,在这种情况下,我会说你在滥用MR。