非常简单的问题:在哪些情况下,我更喜欢Hadoop MapReduce而不是Spark? (我希望还没有提出这个问题 - 至少我没有找到它......)
我目前正在对这两个处理框架进行比较,并且从我到目前为止所读到的内容看来,每个人似乎都建议使用Spark。这也符合您的经验吗?或者你能说出MapReduce比Spark更好的用例吗?
我是否需要更多的资源(特别是RAM)用于Spark的同一任务,那么我需要MapReduce?
谢谢和问候!
答案 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另一方面, Spark的主要用例优于Hadoop
答案 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