在hadoop中进行集合成员测试的最佳方法是什么?

时间:2011-09-16 23:43:02

标签: java hadoop amazon-web-services elastic-map-reduce

我正在使用hadoop为我的应用程序处理一系列分析记录。我想根据我在其流中看到的事件对用户进行分类,然后在再次迭代流时在稍后阶段使用该信息。例如,假设我想要从未激活我的应用程序的所有用户生成数据。

作为第一轮减少的一部分,我可以通过迭代一次流来解决那些从未激活过的人。

问题是,我在哪里放置“用户X从未激活”的数据,以便下次我在第二轮映射器中迭代流时,我可以查看这个事实?我有一些想法,但我不确定哪种方式是正确的hadoop方式:

  • 从我的第一轮减速器输出包含用户列表的侧文件,在我的第二轮中读取它 - 如何避免将整个文件读入内存,如何处理来自多个前端的多个副文件-end redurs(有没有一种很好的方法来排序/组合副文件)?
  • 在我的reducer中缓冲用户在内存中的所有事件,这样我就可以在将它们输出到磁盘之前用“未激活”标记它们 - 感觉有点icky。

是其中一种“正确的方法”,还有另一种方法,我错过了吗?

我正在使用AWS Elastic MapReduce。

1 个答案:

答案 0 :(得分:0)

使用mapreduce非常容易。

映射器:将每个事件作为键发送,将用户作为值发送。

e.G:

USER_NEVER_ACTIVATED_APP : x
USER_PAID_FOR_APP : x
USER_NEVER_ACTIVATED_APP : y

Reducer:你基本上可以获得每个活动的每个用户。 在这种情况下,它将是这样的:

USER_NEVER_ACTIVATED_APP : x,y
USER_PAID_FOR_APP : x

这样你甚至不需要第二个映射器或工作。