3

我在 EC2 实例上建立了一个网站,让用户可以查看来自 4 个社交网络的信息。

一旦用户加入,网站应该每晚更新他们的信息,以便在第二天显示最新的相关信息。

最初,我们有一个 cron-job,它遍历每个用户并对 API 进行必要的调用,然后将数据存储在数据库(amazon rds 实例)上。

此操作每人需要 2 到 30 秒,这意味着一个接一个地进行更新需要几天时间。

我正在查看 MapReduce 并想知道它是否适合我尝试做的事情,但目前我无法确定。

我是否可以向 MapReduce 提供一个 .sql 文件,其中包含我要更新的所有记录 + 一个告诉 MapReduce 如何处理每条记录并让它同时处理它们的脚本?

如果没有,最好的方法是什么?

提前感谢您的帮助。

4

2 回答 2

4

我假设每个用户的数据都独立于其他用户的数据,这对我来说似乎是合乎逻辑的。如果不是这样,请忽略此答案。

由于您拥有相互独立的数据(即每个用户的数据独立于其他用户的数据),因此无需使用 MapReduce。MR只是编程中的一种范式,它在数据独立时简化了数据操作(map准备数据,然后是排序阶段,然后reduce从排序的记录中提取结果)。

在您的情况下,如果您想使用更多计算机,只需在它们之间分配负载 - 每台计算机每小时应处理约 10000 个用户(非常粗略的估计)。然后可以预先将用户分布在计算机之间,或者可以以 1000 个左右的用户为单位请求用户,因此较早结束的机器可以处理更多用户。

但是使用 MR 框架(例如 Hadoop)还有一个额外的好处,即使您只使用一个阶段(仅限地图)。它为您进行错误处理(节点失败、作业失败……),并负责在节点之间分配输入。

我不确定 MR 是否值得设置它,这取决于您以前的经验 - YMMV。

于 2011-05-30T10:16:07.723 回答
1

如果我的理解是正确的。如果这个应用程序被实现为 MapReduce,所有的处理都在 Map 阶段完成,reduce 可能会简单地输出 Map 阶段的结果。因此,如果我要实现这一点,我只需将作业划分为多个 EC2 实例,每个实例处理 sql 数据中给定的记录范围。这假设您对如何将数据划分到不同的实例有一个很好的想法。优点是您无需支付 Elastic MapReduce 的价格并避免任何可能的 MapReduce 开销。

于 2011-05-24T13:39:08.067 回答