首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Hadoop上使用MapReduce还是Spark进行批处理?

在Hadoop上使用MapReduce还是Spark进行批处理?
EN

Stack Overflow用户
提问于 2014-10-31 01:31:48
回答 3查看 8.9K关注 0票数 5

我知道MapReduce是一个在Hadoop上进行批处理的很好的框架。但是,Spark也可以用作Hadoop上的批处理框架,与MapReduce相比,它提供了可伸缩性、容错性和高性能。Cloudera,Hortonworks和MapR也开始在Hadoop上用纱线支持火花。

那么,我想知道在Hadoop上使用Spark作为批处理框架的当前挑战是什么?

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2014-10-31 15:06:38

对于迭代算法,Spark比mapreduce快一个数量级,因为它通过将中间数据缓存在本地JVM中而获得了显着的加速。

随着Spark 1.1主要包括新的shuffle实现(sort-based shuffle而不是基于散列的shuffle),new network module (基于netty而不是使用块管理器发送shuffle数据),新的external shuffle service使Spark执行最快的PetaByte排序(在190个节点上,46TB内存)和TeraByte排序打破了Hadoop的旧记录。

Spark可以很容易地处理比集群的聚合内存大几个数量级的数据集。所以,我的想法是Spark正在朝着正确的方向前进,并最终会变得更好。

作为参考,这篇blog post解释了databricks是如何执行the排序的。

票数 6
EN

Stack Overflow用户

发布于 2014-11-02 09:19:22

我猜想当你说Hadoop时,你指的是HDFS。

与Hadoop MR.相比,使用Spark有许多好处。

Hadoop至少和

  1. Performance:一样快。对于迭代算法(需要执行相同数据集的迭代次数)来说,可以快几个数量级。Map-reduce将每个阶段的输出写入HDFS。

1.1。Spark可以缓存(取决于可用内存)此中间结果,从而减少磁盘IO造成的延迟。

1.2。Spark操作是懒惰的。这意味着Spark可以在开始处理数据之前执行某些优化,因为它可以重新排序操作,因为它们还没有执行。

1.3。Spark保留了操作的谱系,并基于此谱系重新创建部分失败状态,以防发生故障。

  • Unified生态系统: Spark为各种类型的分析提供了一个统一的编程模型--批处理(spark-core),交互式(REPL),流(spark- streaming ),机器学习(mllib),图形处理(graphx),查询API和simpler (SparkSQL)

  • Richer:Spark的API更加丰富和简单。更丰富,因为它支持更多的操作(例如,groupBy、filter ...)。因为这些函数构造的表现力,所以更简单。Spark的API支持Java、Scala和Python (适用于大多数API)。有对R.

  • Multiple数据存储支持的实验支持: Spark支持许多开箱即用的数据存储。您可以使用Spark来分析普通或分布式文件系统、HDFS、Amazon S3、Apache Cassandra、Apache Hive和ElasticSearch中的数据。我相信对许多其他流行数据存储的支持很快就会到来。基本上,如果你想采用Spark,你不需要移动你的数据。

例如,下面是Spark (Scala)中的字数统计代码。

代码语言:javascript
复制
val textFile = sc.textFile("some file on HDFS")
val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

如果你使用标准的Hadoop先生,我肯定你得多写几行。

这里有一些关于Spark的常见误解。

  1. Spark只是一个内存中的集群计算框架。然而,事实并非如此。当你的数据可以放入内存时,Spark表现出色,因为内存访问延迟较低。但是,即使您的数据集不能完全装入内存,您也可以让它工作。
  2. 你需要学习Scala才能使用Spark。Spark是用Scala编写的,在JVM上运行。但是Spark还提供了对Java和Python中大多数常见API的支持。因此,您可以轻松地开始使用Spark,而无需了解Scala。
  3. Spark不能扩展。Spark仅适用于小数据集(GB),不能扩展到大量机器或TB级的数据。这也不是真的。它已成功用于对PetaBytes of data

进行排序

最后,如果你在Hadoop MR中没有遗留的代码库,那么采用Spark是非常有意义的,原因很简单,因为所有主要的Hadoop供应商都在转向Spark。

票数 5
EN

Stack Overflow用户

发布于 2014-10-31 07:26:54

Apache Spark在内存中运行,这使得它比mapreduce快得多。Spark最初是伯克利的一个研究项目。

Mapreduce广泛使用磁盘(用于外部排序、随机排序等)。

因为hadoop作业的输入大小是the级。Spark内存需求将超过传统hadoop。

因此,基本上,对于较小的作业和在您的集群中具有巨大内存的情况,sparks胜出。实际上,对于大多数集群来说,情况并非如此。

有关spark的更多详细信息,请参阅spark.apache.org

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26659647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档