何时比Spark更喜欢Hadoop MapReduce?

时间:2015-05-18 09:09:59

标签: java apache-spark hadoop mapreduce

非常简单的问题:在哪些情况下,我更喜欢Hadoop MapReduce而不是Spark? (我希望还没有提出这个问题 - 至少我没有找到它......)

我目前正在对这两个处理框架进行比较,并且从我到目前为止所读到的内容看来,每个人似乎都建议使用Spark。这也符合您的经验吗?或者你能说出MapReduce比Spark更好的用例吗?

我是否需要更多的资源(特别是RAM)用于Spark的同一任务,那么我需要MapReduce?

谢谢和问候!

5 个答案:

答案 0 :(得分:3)

Spark比传统的MapReduce有了很大的改进。

你什么时候使用MapReduce而不是Spark?

当您使用MapReduce范例编写的遗留程序非常复杂以至于您不想重新编程时。此外,如果您的问题不是分析数据,那么Spark可能不适合您。我能想到的一个例子是Web爬行,有一个很棒的Apache项目叫做Apache Nutch,它基于Hadoop而不是Spark。

我何时会使用Spark而不是MapReduce?

自2012年以来......自从我开始使用Spark以来,我一直不想回去。将我的知识扩展到Java以外并学习Scala也是一个很好的动力。 Spark中的许多操作都需要较少的字符才能完成。此外,使用Scala / REPL可以更快地生成代码。 Hadoop有Pig,但是你必须学习“Pig Latin”,这在其他任何地方都不会有用......

如果你想在数据分析中使用Python Libs,我发现Python更容易使用Spark和MapReduce。我也非常喜欢使用像IPython Notebook这样的东西。当我开始学习Scala学习Scala的同时,使用带有Spark的IPython Notebook激励我学习PySpark。它没有所有的功能,但大部分都可以用Python包来弥补。

Spark现在还具有Spark SQL,后者与Hive向后兼容。这使您可以使用Spark运行接近SQL查询。我认为这比试图学习HiveQL要好得多,HiveQL的不同之处在于它的一切都是特定的。使用Spark SQL,您通常可以使用常规SQL建议来解决问题。

最后,Spark也有MLLib,用于机器学习,这是对Apache Mahout的一个很大的改进。

最大火花问题:互联网上没有充满故障排除提示。由于Spark是新的,关于问题的文档有点缺乏......与AmpLabs / Databricks(来自加州大学伯克利分校的Spark的创建者及其咨询业务)的人合作是个好主意,并利用他们的论坛寻求支持。

答案 1 :(得分:2)

如果

,您应该更喜欢 Hadoop Map Reduce 而不是 Spark
  1. 您必须查询历史数据,这些数据在庞大的群集中以大量的tera字节/ peta字节显示。
  2. 您对工作完成时间并不感到烦恼 - 以小时为单位的工作完成时间对您来说并不重要
  3. Hadoop MapReduce适用于不适合内存的数据,而Apache Spark对于适合内存的数据具有更好的性能,尤其是在专用集群上。
  4. Hadoop MapReduce可以是一个经济的选择,因为Hadoop作为服务产品(HaaS)和更多人员的可用性
  5. Apache Spark和Hadoop MapReduce都是容错的,但相对而言Hadoop MapReduce比Spark更容错。
  6. 另一方面, Spark的主要用例优于Hadoop

    1. 机器学习中的迭代算法
    2. 交互式数据挖掘和数据处理
    3. Spark是一个完全与Apache Hive兼容的数据仓库系统,运行速度比Hive快100倍。
    4. 流处理:实时流中的日志处理和欺诈检测,用于警报,聚合和分析
    5. 传感器数据处理:从多个来源获取和加入数据的地方
    6. 查看this blogdezyre blog

答案 2 :(得分:0)

每个人都是对的!火花! Spark不需要更多资源 - 您可以通过将RDD持久性转换为磁盘来调整它以减少RAM。

如果计划使用Spark使用1.3作为最低版本,因为已经有了显着的改进。

只有您可能最终使用MR的情况才是您要继续使用遗留代码。

另一点需要注意的是,人们已经放弃了编写MR代码很长一段时间了。在MR之上有像Pig,Hive等的抽象。现在所有这些抽象将在未来开始支持MR。这是Spark仍然有点落后的地方之一。

答案 3 :(得分:0)

核心,MR是一个并行编程模型,它本身就是最高级的东西。它已经改变了关于如何思考和使用数据的想法。

Hadoop通过基于MR(和分布式文件系统,HDFS)的分布式计算引擎设计,将MR带到了所有人的手中。

现在,随着这些事情的解决,更多的新需求开始出现,而Hadoop MR(以及任何高层抽象)都未能在3个特定领域实现: a)迭代计算 b)实时数据处理 c)交互式使用

为了解决这些问题,Spark带来了两个重要的变化: 1.通用DAG 2.分布式数据共享

因此,从本质上讲,如果你涉及这3个用例,很可能Spark更可取。如果你不是,你可能无法通过使用Spark获得任何额外的好处(除了舒适的python和可能的#34; geek" nametag)。事实上,在较小的群集中,配置较小的群集可能在Hadoop MR中表现更好。

答案 4 :(得分:-1)

据我所知,在Spark中,整个单个分区必须适合内存(2 GB是最大大小,因为它在内部使用ByteBuffer。执行groupBy操作时可能会出现问题,并且一个组大于此限制(每个组都表示为无法分区的单个Tuple2项。)

因此,在某些情况下,与MapReduce相比,Spark可能会失败。

链接到Spark JIRA中的相关问题 https://issues.apache.org/jira/browse/SPARK-1476