问题
我们有多个 HBase 表:A、B、C。假设 A 是需要处理的记录队列。它平均可以包含 2500 万条记录。A 有用户 ID。B 有每个用户执行的网站点击。B 可以包含数十亿行。C 有一些关于用户的次要信息。
我们使用 MapReduce 作业对队列中的记录执行预测分析(成千上万的决策树)。问题的范围不包括实际的分析建模。
问题
- MR 作业正在对表 B 和 C 执行即席查询。例如,Map 任务 1 执行查询以获取用户 1 的命中,而 Map 任务 2 执行查询以获取用户 2 的命中。如果这些命中最终在同一区域服务器中,将它会妨碍性能(比赛条件等)吗?是否有像 ChainMapper (ChainReducer) 这样的模式来拆分输入集,以便每个映射器具有跨越一个区域服务器的键?
- 我最初的想法是让队列包含所有必需的输入(来自 b 和 c 的结果)。此输入将被压缩(仅用于建模)。这种方法将避免执行即席查询(同时通过多个地图任务跨区域服务器)。
欢迎任何其他建议。
我们正在使用 cloudera CDH 3(hadoop、hbase)。