1

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

1)以前有人做过吗?

2)应该只有一个没有Reducer的Mapper吗?

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

4) MapReduce 是这类事情的最佳方法吗?——我们在滥用 MapReduce 吗?

谢谢你。

4

3 回答 3

2

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

于 2012-08-16T02:45:11.077 回答
2

这“听起来”与 Nutch 所做的类似(尽管除了该声明之外,我对 Nutch 不太熟悉)。

一些观察点:

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

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

  1. 我还没有做这件事,但不得不从我的 Mapper 进行 Web 服务调用,以从 3rd 方 API 获取一些元数据以进行进一步处理。第 3 方 Web 服务很快成为瓶颈,拖慢了一切。
  2. 是的,因为在这种情况下没有什么可以减少的(我假设您只想将下载的文件保存在某处)。
  3. 我会将 FTP/HTTP URL 保存在 HDFS 中,并让您的 Mapper 从您的 HDFS 中读取 URL。
  4. 我高度怀疑 MapReduce 是处理这类事情的最佳方法。就像我已经说过的那样,我认为您的互联网连接很容易成为瓶颈,并且您将无法大大扩展您的 MR 程序。一旦下载(并保存在 HDFS 中),如果您想使用 MapReduce 处理数据,那将是另一回事。是的,在这种情况下,我会说你在滥用 MR。
于 2012-08-15T03:10:53.923 回答