我已经用 cloudera 测试了 hadoop 和 mapreduce,我发现它很酷,我认为我是最新的和相关的 BigData 解决方案。但是几天前,我发现了这个:
https://spark.incubator.apache.org/
一个“闪电般快速的集群计算系统”,能够在 Hadoop 集群的顶部工作,并且显然能够碾压 mapreduce。我看到它在 RAM 中比 mapreduce 更有效。
我认为当您必须进行集群计算以克服单台机器上可能遇到的 I/O 问题时,mapreduce 仍然很重要。
但是,由于 Spark 可以完成 mapreduce 所做的工作,并且可能在多个操作上更有效率,这不是 MapReduce 的终结吗?还是 MapReduce 可以做更多的事情,或者 MapReduce 是否可以在特定上下文中比 Spark 更高效?
取决于你想做什么。
MapReduce 的最大优势在于处理大量大型文本文件。 Hadoop 的实现是围绕字符串处理构建的,它的 I/O 非常繁重。
MapReduce 的问题在于,人们看到了简单的并行性锤子,而一切都开始看起来像钉子。不幸的是,Hadoop 在处理大型文本文件以外的任何方面的性能都很糟糕。如果你写了一个像样的并行代码,你通常可以在 Hadoop 甚至产生它的第一个 VM 之前完成它。我在自己的代码中看到了 100 倍的差异。
Spark 消除了 Hadoop 的许多开销,例如一切对 I/O 的依赖。相反,它将所有内容都保存在内存中。如果您有足够的内存,那就太好了,如果没有,那就不太好了。
请记住,Spark 是 Hadoop 的扩展,而不是替代品。如果你使用 Hadoop 来处理日志,Spark 可能帮不上什么忙。如果你有更复杂的,可能是紧密耦合的问题,那么 Spark 会很有帮助。此外,您可能喜欢 Spark 的 Scala 接口(interface)用于在线计算。