MapReduce适合我吗?

时间:2010-01-13 19:49:09

标签: mapreduce

我正在研究一个涉及分析大量数据的项目,所以我最近发现了MapReduce,在我进一步深入研究之前,我想确保我的期望是正确的。

与数据的交互将在网络界面发生,因此响应时间至关重要,我想的是10-15秒的限制。假设在我对其进行任何分析之前,我的数据将被加载到分布式文件系统中,我可以从中获得什么样的性能?

假设我需要过滤一个结构良好的简单5GB XML文件,其中包含相当平坦的数据结构和10,000,000条记录。让我们说输出将产生100,000条记录。可能是10秒?

如果是,我在看什么样的硬件? 如果没有,为什么不呢?

我把这个例子放下,但现在希望我没有。 5GB只是我所谈论的一个样本,实际上我会处理大量数据。 5GB可能是一天中一小时的数据,我可能想要识别符合特定条件的所有记录。

数据库对我来说真的不是一个选择。我想知道的是,使用MapReduce可以获得的最快性能是什么。它总是在几分钟或几小时?它永远不会秒?

5 个答案:

答案 0 :(得分:10)

MapReduce适用于扩展大型数据集的处理,但并不是为了响应。例如,在Hadoop实现中,启动的开销通常需要几分钟。这里的想法是采取一个需要几天的处理工作,并将其降低到几小时,或几小时到几分钟等。但是你不会为了响应网络请求而开始一项新工作,并期望它能够完成时间回应。

要了解为何会出现这种情况,请考虑MapReduce的工作方式(一般情况,高级概述):

  • 一堆节点接收部分节点 输入数据(称为拆分)和do 一些处理(地图步骤)

  • 中间数据(输出来自 最后一步)重新划分 具有相同键的数据最终结束 一起。这通常需要一些 节点之间的数据传输。

  • reduce节点(不是 必然与映射器不同 节点 - 一台机器可以做到 连续多个工作)执行 减少步骤。

  • 收集并合并结果数据 生成最终输出集。

虽然Hadoop等尝试尽可能保持数据局部性,但在处理过程中仍然存在大量的混乱。仅此一项就可以阻止您使用分布式MapReduce实现来支持响应式Web界面。

编辑:正如Jan Jongboom指出的那样,MapReduce非常适合预处理数据,因此Web查询可以很快,因为他们不需要进行处理。考虑从大量网页创建倒排索引的着名示例。

答案 1 :(得分:3)

MapReduce是一个通用术语。您可能想问一下具有作业控制功能的全功能MapReduce框架(如Hadoop)是否适合您。答案仍然取决于框架,但通常,MapReduce框架的作业控制,网络,数据复制和容错功能使其适用于需要几分钟,几小时或更长时间的任务,这可能是简短而正确的答案对你而言。

如果您的任务可以在独立的映射器之间拆分并与一个或多个reducer结合使用,那么MapReduce范例可能对您有用,并且您可以使用的语言,框架和基础结构可以利用它。

MapReduce和数据库之间没有必要区别。像SQL这样的声明性语言是抽象并行性的好方法,可查询的MapReduce框架(如HBase)也是如此。 This article讨论了k-means算法的MapReduce实现,并以纯SQL示例结束(假设服务器可以并行化它)。

理想情况下,开发人员根本不需要了解管道。 Erlang examples喜欢展示功能语言功能如何处理过程控制。

另外,请记住,有轻量级方法可以使用MapReduce,例如bashreduce

答案 2 :(得分:2)

MapReduce的分布式实现(如Hadoop)不适合处理5GB XML

  • Hadoop最适合大量数据。虽然5GB是一个相当大的XML文件,但它可以在一台机器上轻松处理。
  • 输入文件到Hadoop作业需要可拆分,以便可以在不同的计算机上处​​理文件的不同部分。除非您的xml非常平坦,否则文件的拆分将是不确定的,因此您需要预处理步骤来格式化文件以进行拆分。

如果您有许多5GB文件,那么您可以使用hadoop来分发分割。您还可以使用它来跨文件合并结果,并将结果存储为一种格式,以便快速查询以供您的Web界面使用,如其他答案所述。

答案 3 :(得分:2)

我最近在一个系统上工作了大约120GB /小时,有30天的历史。我们最终出于组织原因使用Netezza,但我认为Hadoop可能是一个合适的解决方案,具体取决于您的数据和查询的详细信息。

请注意,XML非常详细。您的主要成本之一是读/写磁盘。如果可以,请选择更紧凑的格式。

群集中的节点数取决于磁盘和CPU的类型和数量。您可以假设您将受到磁盘速度的限制。如果您的7200rpm磁盘可以以50MB / s的速度扫描,并且您希望在10s内扫描500GB,那么您需要1000个节点。

您可能希望使用亚马逊的EC2,您可以在这里使用Hadoop群集并按分钟付费,或者您可以在其基础架构上运行MapReduce作业。

答案 4 :(得分:0)

听起来你可能想要的是一个很好的老式数据库。不像map / reduce那么时髦,但通常足以满足这样的小型工作。根据您的过滤需要的灵活性,您可以将您的5GB文件导入SQL数据库,也可以自己实现自己的索引方案,方法是将记录存储在不同的文件中,将所有内容存储在巨大的哈希表中,或任何适合您需要的东西。