MapReduce还是Spark?

28

我已经测试了hadoop和cloudera的mapreduce,感觉很棒,我认为它是最新和最相关的大数据解决方案。但是几天前,我发现了这个:https://spark.incubator.apache.org/

这是一个“闪电般快速的集群计算系统”,能够在Hadoop集群上运行,似乎能够击败mapreduce。我发现与mapreduce相比,它更多地使用内存。我认为当您需要进行集群计算以克服单台机器上可能出现的I / O问题时,mapreduce仍然很重要。 但是由于Spark可以完成mapreduce的工作,并且在某些操作上可能更加高效,那么MapReduce的终结是否已经到来?还是MapReduce可以在某些情况下比Spark更有效?

2个回答

39

取决于您想要做什么。

MapReduce最大的优点是处理大量的大型文本文件。Hadoop的实现是围绕字符串处理构建的,并且它非常依赖I/O。

MapReduce的问题在于人们看到了易于并行处理的优势,所有事情开始看起来像钉子。不幸的是,除了处理大型文本文件之外,Hadoop的性能非常糟糕。如果编写一个体面的并行代码,通常可以在Hadoop生成其第一个VM之前完成。我已经看到自己的代码中有100倍的差异。

Spark消除了许多Hadoop的开销,例如对IO的全部依赖。相反,它将所有内容保留在内存中。如果您拥有足够的内存,则非常好,否则就不那么好了。

请记住,Spark是Hadoop的扩展,而不是替代品。如果您使用Hadoop处理日志,则Spark可能无法帮助您。如果您有更复杂、或者紧密耦合的问题,则Spark将非常有用。此外,您可能会喜欢Spark的Scala接口进行在线计算。


除了“Spark是Hadoop的扩展”这个说法外,你的回答很好。虽然最流行的做法是在Hadoop Yarn之上使用Spark,但Spark也可以在不属于Hadoop的MESOS上运行,甚至可以独立运行。 - pedram bashiri

27

MapReduce 是一种面向批处理的技术,因此任何基于 MR 实现的框架(例如 Hive 和 Pig)也都是面向批处理的。对于机器学习和交互式分析中的迭代处理,Hadoop/MR 无法满足要求。这里有一篇来自 Cloudera 的关于为什么选择 Spark 的文章,非常好地总结了这一点。Here

这并不是 MR 的终结。截至我写下这篇文章时,与 Spark 相比,Hadoop 更加成熟,而且很多供应商都支持它。随着时间的推移,情况将会发生改变。Cloudera 已经开始在 CDH 中包含 Spark,随着时间的推移,越来越多的供应商会将其纳入其大数据分发,并提供商业支持。我们在可预见的未来会看到 MR 和 Spark 并行存在。

另外,在 Hadoop 2(也称为 YARN)中,MR 和其他模型(包括 Spark)可以在单个集群上运行。因此,Hadoop 不会消失。


1
MR模式不会消失,但平台可能会变化。MR模式也可以在Spark上实现。 - Praveen Sripati
1
发现这个链接:http://gigaom.com/2014/02/27/as-mapreduce-fades-apache-spark-is-now-a-top-level-project/#看起来Spark可能会在更多更新后成为Hadoop的下一个计算引擎 :) - Nosk
3
“批处理”和“迭代”并不是互斥的。你可以将一个迭代算法作为批处理作业运行。 - stackoverflowuser2010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接