使用 cronjob + API 的 Amazon MapReduce

Posted

技术标签:

【中文标题】使用 cronjob + API 的 Amazon MapReduce【英文标题】:Amazon MapReduce with cronjob + APIs 【发布时间】:2011-05-21 09:27:07 【问题描述】:

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

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

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

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于使用 cronjob + API 的 Amazon MapReduce的主要内容,如果未能解决你的问题,请参考以下文章

Google API 客户端和 Cronjob

OCP CronJob 需要哪些 API

JSON 服务器 - 使用 cronjob 更新数据库

无法使用 Psycopg2 在 Amazon Redshift 中创建表

我应该使用 cronjob 还是条带订阅(500 个活动)?

无法让 cron 在 Amazon EC2 上工作?