如果我有数百万条数据记录,这些记录每天都在不断更新和添加,我需要梳理所有数据以查找与特定逻辑匹配的记录,然后将匹配的子集插入到单独的数据库中,我会使用Hadoop和MapReduce来完成这样的任务,还是缺少其他技术?我寻找标准RDMS以外的东西的主要原因是因为所有基础数据都来自多个来源,并且结构不统一。
Map-Reduce是为可以并行化的算法而设计的,并且可以计算和聚合本地结果。一个典型的例子是计算文档中的字数。您可以将其拆分为多个部分,其中计算一个节点上的一些单词,另一个节点上的一些单词等,然后将总数相加(显然这是一个微不足道的例子,但说明了问题的类型)。
Hadoop设计用于处理大型数据文件(如日志文件)。默认块大小为64MB,因此拥有数百万条小记录并不适合Hadoop。
为了解决具有非统一结构数据的问题,您可以考虑使用NoSQL数据库,该数据库旨在处理许多列为空的数据(例如MongoDB)。
Hadoop/MR是为批处理而设计的,而不是为实时处理而设计的。因此,必须考虑其他一些替代方案,例如Twitter Storm,HStreaming。
另外,查看Hama以实时处理数据。请注意,Hama 中的实时处理仍然很粗糙,必须做很多改进/工作。
我会推荐Storm或Flume。在这两种记录中,您都可以分析每条记录并决定如何处理它。
如果你的数据量不是很大,而且数百万条记录不是这样的声音,我建议尝试从RDMBS中获取最大收益,即使你的模式没有被正确规范化。我认为即使是结构 K1、K2、K3、Blob 也会更有用
在NoSQL中,键值存储是为了支持各种风格的无模式数据而构建的,但它们的查询能力是有限的。
我能认为有用的唯一情况是MongoDB/CoachDB索引无模式数据的能力。您将能够按某些属性值获取记录。
关于Hadoop MapReduce-我认为它没有用,除非你想利用大量的CPU来处理,或者有大量的数据或需要分布式排序能力。