我正在研究一个涉及分析大量数据的项目,所以我最近发现了MapReduce,在我进一步深入研究之前,我想确保我的期望是正确的.
与数据的交互将发生在Web界面上,因此响应时间至关重要,我想的是10-15秒的限制.假设在我对其进行任何分析之前,我的数据将被加载到分布式文件系统中,我可以从中获得什么样的性能?
假设我需要过滤一个结构良好的简单5GB XML文件,它具有相当平坦的数据结构和10,000,000条记录.让我们说输出将产生100,000条记录.可能10秒?
如果它,我在看什么样的硬件?如果没有,为什么不呢?
我把这个例子放下,但现在希望我没有.5GB只是我所谈论的一个样本,实际上我会处理大量数据.5GB可能是一天中一小时的数据,我可能想要识别符合特定条件的所有记录.
数据库对我来说真的不是一个选择.我想知道的是,使用MapReduce可以获得的最快性能是什么.它总是在几分钟或几小时?它永远不会秒?
MapReduce适用于扩展大型数据集的处理,但它不是为了响应.例如,在Hadoop实现中,启动的开销通常需要几分钟.这里的想法是采取一个需要几天的处理工作,并将其降低到几小时,或几小时到几分钟等等.但是你不会为了响应网络请求而开始一项新工作并期望它完成时间回应.
要了解为什么会出现这种情况,请考虑MapReduce的工作方式(一般,高级概述):
一堆节点接收部分输入数据(称为拆分)并进行一些处理(映射步骤)
重新分区中间数据(从最后一步输出),使得具有相同键的数据一起结束.这通常需要节点之间的一些数据传输.
reduce节点(不一定与映射器节点不同 - 一台机器可以连续执行多个作业)执行reduce步骤.
收集并合并结果数据以生成最终输出集.
虽然Hadoop等人试图尽可能保持数据局部性,但在处理过程中仍然存在大量的混乱.仅此一项就可以阻止您使用分布式MapReduce实现来支持响应式Web界面.
编辑:正如Jan Jongboom指出的那样,MapReduce非常适合预处理数据,因此Web查询可以快速进行,因为他们不需要进行处理.考虑从大量网页创建倒排索引的着名示例.