我正在使用 hadoop 为我的应用程序处理一系列分析记录。我想根据我在他们的流中看到的事件对用户进行分类,然后在稍后再次迭代流时使用该信息。例如,假设我想为所有从未激活我的应用程序的用户生成数据。
作为我的第一轮减少的一部分,我可以通过在流上迭代一次来计算出谁永远不会激活。
问题是,我将“用户 X 从未激活”的数据放在哪里,以便下次在第二轮映射器中遍历流时,我可以查找该事实?我有一些想法,但我不确定哪个是正确的 hadoop 方式:
- 从我的第一轮减速器中输出一个包含用户列表的辅助文件,在我的第二轮中读取它——如何避免将整个文件读入内存,如何处理来自多个前端减速器的多个辅助文件(有没有排序/组合边文件的好方法)?
- 在我的 reducer 中将用户的所有事件缓存在内存中,这样我就可以在将它们输出到磁盘之前将它们全部标记为“未激活”——感觉有点恶心。
其中一个是“正确的方式”吗,还有另一种我想念的方式吗?
我正在使用 AWS Elastic MapReduce。