从数据流的角度来看 MapReduce 和 HBase 的组合,我的问题似乎很合适。我有大量文档要映射、合并和缩减。我之前的 SQL 实现是将任务拆分为批处理操作,将 Map 的结果累积存储到表中,然后执行相当于 reduce 的操作。这样做的好处是,在执行期间(或执行之间)的任何时候,我都可以在那个时间点获得 Map 的结果。
据我了解,将此作业作为 MapReduce 运行需要每次运行所有 Map 函数。
我的 Map 函数(实际上是任何函数)总是为给定的输入提供相同的输出。如果我不需要,重新计算输出根本没有意义。我的输入(一组文档)将不断增长,我将定期对数据运行 MapReduce 操作。在执行之间,我应该只需要为新添加的文档计算 Map 函数。
我的数据可能是 HBase -> MapReduce -> HBase。鉴于 Hadoop 是一个完整的生态系统,它可能能够知道给定函数已应用于具有给定标识的行。我假设 HBase 表中的条目是不可变的。Hadoop 是否/可以考虑到这一点?
我从文档(尤其是 Cloudera 视频)中了解到,重新计算(潜在冗余数据)可能比针对 Hadoop 正在用于处理的问题类别进行持久化和检索更快。
有什么意见/答案吗?