什么时候更喜欢 Hadoop MapReduce 而不是 Spark?
When to prefer Hadoop MapReduce over Spark?
非常简单的问题:在哪些情况下我应该更喜欢 Hadoop MapReduce 而不是 Spark?
(我希望这个问题还没有被问到 - 至少我没有找到它......)
我目前正在对这两个处理框架进行比较,从目前的阅读来看,似乎每个人都建议使用 Spark。这是否也符合你的经验?或者您能说出 MapReduce 性能优于 Spark 的用例吗?
我是否需要更多的资源(特别是 RAM)来完成与 Spark 相同的任务,然后我需要 MapReduce?
感谢和问候!
大家说得对!火花! Spark 不需要更多资源 - 您可以通过将 RDD 持久化到磁盘来调整它以占用更少的 RAM。
如果计划使用 Spark,请使用 1.3 作为最低版本,因为已经有了重大改进。
您可能最终使用 MR 的唯一情况是您有遗留代码要继续使用。
另一点需要注意的是,人们已经离开编写 MR 代码已经有一段时间了。在 MR 之上已经有 Pig、Hive 等抽象。现在所有这些抽象将在未来开始支持 MR。这是 Spark 仍然有点落后的地方之一。
Spark 是对传统 MapReduce 的巨大改进。
您什么时候会在 Spark 上使用 MapReduce?
当您有一个用 MapReduce 范式编写的遗留程序非常复杂以至于您不想对其重新编程时。此外,如果您的问题不是关于分析数据,那么 Spark 可能不适合您。我能想到的一个例子是网络爬虫,有一个很棒的 Apache 项目叫做 Apache Nutch,它建立在 Hadoop 而不是 Spark 上。
我什么时候会在 MapReduce 上使用 Spark?
自 2012 年以来...自从我开始使用 Spark 以来,我就不想回去了。这也是我扩展 Java 知识和学习 Scala 的巨大动力。 Spark 中的许多操作只需较少的字符即可完成。此外,使用 Scala/REPL 可以更好地快速生成代码。 Hadoop 有 Pig,但是你必须学习 "Pig Latin",它在其他任何地方都没有用...
如果您想在数据分析中使用 Python 库,我发现 Python 使用 Spark 和 MapReduce 更容易。我也非常喜欢使用 IPython 笔记本之类的东西。就像 Spark 在我开始学习 Scala 时一样,使用 IPython Notebook 和 Spark 激励我学习 PySpark。它不具备所有功能,但大部分功能都可以用 Python 包来弥补。
Spark 现在还具有 Spark SQL,它向后兼容 Hive。这使您可以使用 Spark 来 运行 接近 SQL 查询。我认为这比尝试学习 HiveQL 要好得多,它非常不同,以至于一切都是特定于它的。使用 Spark SQL,您通常可以使用一般 SQL 建议来解决问题。
最后,Spark 还有用于机器学习的 MLLib,这是对 Apache Mahout 的巨大改进。
最大的 Spark 问题:互联网上没有很多故障排除提示。由于 Spark 是新的,有关问题的文档有点缺乏......最好与来自 AmpLabs/Databricks 的人(来自加州大学伯克利分校的 Spark 的创建者及其咨询业务)结交,并利用他们的论坛为了支持。
据我所知,在 Spark 中,整个单个分区必须适合内存(2 GB 是最大大小,因为它在内部使用 ByteBuffer
)。这在执行 groupBy
操作时可能会出现问题,并且一个组大于此限制(每个组表示为单个 Tuple2
无法分区的项目)。
因此在某些情况下,Spark 与 MapReduce 相比可能会失败。
Link 到 Spark JIRA 中的相关问题
https://issues.apache.org/jira/browse/SPARK-1476
MR 的核心是一个并行编程模型,就其本身而言是最高级的东西。它改变了关于如何思考和使用数据的观念。
Hadoop 以其基于 MR(以及分布式文件系统,HDFS)的分布式计算引擎设计,让 MR 触手可及。
现在这些事情都解决了,更多的新需求开始涌现,而 Hadoop MR(以及位于其之上的任何高级抽象)未能在 3 个特定领域交付:
a) 迭代计算
b) 实时数据处理
c) 交互使用
为了解决这些问题,Spark带来了2个重要的变化:
1. 通用 DAG
2.分布式数据共享
因此,从本质上讲,如果您属于这 3 个用例,那么 Spark 很可能会更可取。如果不是,您可能无法通过使用 Spark 获得任何额外的好处(除了舒适的 python 和可能的 "geek" 名牌)。事实上,在较小的集群或具有较小配置的集群中,Hadoop MR 可能表现更好。
你应该更喜欢 Hadoop Map Reduce 而不是 Spark if
- 您必须查询历史数据,这些数据在一个巨大的集群中以 tera bytes/peta 字节的形式存在。
- 您不关心作业完成时间 - 以小时为单位的作业完成时间与以分钟为单位的作业完成时间对您来说并不重要
- Hadoop MapReduce 适用于不适合内存的数据,而 Apache Spark 对于适合内存的数据具有更好的性能,特别是在专用集群上。
- 由于 Hadoop 即服务产品 (HaaS) 和更多人员的可用性,Hadoop MapReduce 可能是一个经济的选择
- Apache Spark 和 Hadoop MapReduce 都是容错的,但相比之下,Hadoop MapReduce 比 Spark 更容错。
另一方面,Spark 在 Hadoop 上的主要用例
- 机器学习中的迭代算法
- 交互式数据挖掘和数据处理
- Spark 是一个完整的 Apache Hive-compatible 数据仓库系统,运行 比 Hive 快 100 倍。
- 流处理:实时流中的日志处理和欺诈检测,用于警报、聚合和分析
- 传感器数据处理:从多个来源获取和合并数据
看看this blog and dezyre blog
非常简单的问题:在哪些情况下我应该更喜欢 Hadoop MapReduce 而不是 Spark? (我希望这个问题还没有被问到 - 至少我没有找到它......)
我目前正在对这两个处理框架进行比较,从目前的阅读来看,似乎每个人都建议使用 Spark。这是否也符合你的经验?或者您能说出 MapReduce 性能优于 Spark 的用例吗?
我是否需要更多的资源(特别是 RAM)来完成与 Spark 相同的任务,然后我需要 MapReduce?
感谢和问候!
大家说得对!火花! Spark 不需要更多资源 - 您可以通过将 RDD 持久化到磁盘来调整它以占用更少的 RAM。
如果计划使用 Spark,请使用 1.3 作为最低版本,因为已经有了重大改进。
您可能最终使用 MR 的唯一情况是您有遗留代码要继续使用。
另一点需要注意的是,人们已经离开编写 MR 代码已经有一段时间了。在 MR 之上已经有 Pig、Hive 等抽象。现在所有这些抽象将在未来开始支持 MR。这是 Spark 仍然有点落后的地方之一。
Spark 是对传统 MapReduce 的巨大改进。
您什么时候会在 Spark 上使用 MapReduce?
当您有一个用 MapReduce 范式编写的遗留程序非常复杂以至于您不想对其重新编程时。此外,如果您的问题不是关于分析数据,那么 Spark 可能不适合您。我能想到的一个例子是网络爬虫,有一个很棒的 Apache 项目叫做 Apache Nutch,它建立在 Hadoop 而不是 Spark 上。
我什么时候会在 MapReduce 上使用 Spark?
自 2012 年以来...自从我开始使用 Spark 以来,我就不想回去了。这也是我扩展 Java 知识和学习 Scala 的巨大动力。 Spark 中的许多操作只需较少的字符即可完成。此外,使用 Scala/REPL 可以更好地快速生成代码。 Hadoop 有 Pig,但是你必须学习 "Pig Latin",它在其他任何地方都没有用...
如果您想在数据分析中使用 Python 库,我发现 Python 使用 Spark 和 MapReduce 更容易。我也非常喜欢使用 IPython 笔记本之类的东西。就像 Spark 在我开始学习 Scala 时一样,使用 IPython Notebook 和 Spark 激励我学习 PySpark。它不具备所有功能,但大部分功能都可以用 Python 包来弥补。
Spark 现在还具有 Spark SQL,它向后兼容 Hive。这使您可以使用 Spark 来 运行 接近 SQL 查询。我认为这比尝试学习 HiveQL 要好得多,它非常不同,以至于一切都是特定于它的。使用 Spark SQL,您通常可以使用一般 SQL 建议来解决问题。
最后,Spark 还有用于机器学习的 MLLib,这是对 Apache Mahout 的巨大改进。
最大的 Spark 问题:互联网上没有很多故障排除提示。由于 Spark 是新的,有关问题的文档有点缺乏......最好与来自 AmpLabs/Databricks 的人(来自加州大学伯克利分校的 Spark 的创建者及其咨询业务)结交,并利用他们的论坛为了支持。
据我所知,在 Spark 中,整个单个分区必须适合内存(2 GB 是最大大小,因为它在内部使用 ByteBuffer
)。这在执行 groupBy
操作时可能会出现问题,并且一个组大于此限制(每个组表示为单个 Tuple2
无法分区的项目)。
因此在某些情况下,Spark 与 MapReduce 相比可能会失败。
Link 到 Spark JIRA 中的相关问题 https://issues.apache.org/jira/browse/SPARK-1476
MR 的核心是一个并行编程模型,就其本身而言是最高级的东西。它改变了关于如何思考和使用数据的观念。
Hadoop 以其基于 MR(以及分布式文件系统,HDFS)的分布式计算引擎设计,让 MR 触手可及。
现在这些事情都解决了,更多的新需求开始涌现,而 Hadoop MR(以及位于其之上的任何高级抽象)未能在 3 个特定领域交付: a) 迭代计算 b) 实时数据处理 c) 交互使用
为了解决这些问题,Spark带来了2个重要的变化: 1. 通用 DAG 2.分布式数据共享
因此,从本质上讲,如果您属于这 3 个用例,那么 Spark 很可能会更可取。如果不是,您可能无法通过使用 Spark 获得任何额外的好处(除了舒适的 python 和可能的 "geek" 名牌)。事实上,在较小的集群或具有较小配置的集群中,Hadoop MR 可能表现更好。
你应该更喜欢 Hadoop Map Reduce 而不是 Spark if
- 您必须查询历史数据,这些数据在一个巨大的集群中以 tera bytes/peta 字节的形式存在。
- 您不关心作业完成时间 - 以小时为单位的作业完成时间与以分钟为单位的作业完成时间对您来说并不重要
- Hadoop MapReduce 适用于不适合内存的数据,而 Apache Spark 对于适合内存的数据具有更好的性能,特别是在专用集群上。
- 由于 Hadoop 即服务产品 (HaaS) 和更多人员的可用性,Hadoop MapReduce 可能是一个经济的选择
- Apache Spark 和 Hadoop MapReduce 都是容错的,但相比之下,Hadoop MapReduce 比 Spark 更容错。
另一方面,Spark 在 Hadoop 上的主要用例
- 机器学习中的迭代算法
- 交互式数据挖掘和数据处理
- Spark 是一个完整的 Apache Hive-compatible 数据仓库系统,运行 比 Hive 快 100 倍。
- 流处理:实时流中的日志处理和欺诈检测,用于警报、聚合和分析
- 传感器数据处理:从多个来源获取和合并数据
看看this blog and dezyre blog