我知道mapreduce是一个很好的hadoop批处理框架。但是,spark也可以作为hadoop上的批处理框架,与mapreduce相比,它提供了可伸缩性、容错性和高性能。cloudera、hortonworks和mapr也开始用yarn支持hadoop上的spark。
但是,很多公司仍然使用hadoop上的mapreduce框架来代替spark进行批处理。
所以,我试图理解spark作为hadoop上的批处理框架目前面临的挑战是什么?
有什么想法吗?
我知道mapreduce是一个很好的hadoop批处理框架。但是,spark也可以作为hadoop上的批处理框架,与mapreduce相比,它提供了可伸缩性、容错性和高性能。cloudera、hortonworks和mapr也开始用yarn支持hadoop上的spark。
但是,很多公司仍然使用hadoop上的mapreduce框架来代替spark进行批处理。
所以,我试图理解spark作为hadoop上的批处理框架目前面临的挑战是什么?
有什么想法吗?
3条答案
按热度按时间9avjhtql1#
apachespark在内存中运行,比mapreduce快得多。spark最初是在伯克利的一个研究项目。
mapreduce广泛使用磁盘(用于外部排序、无序排列等)。
因为hadoop作业的输入大小是以TB为单位的。spark内存需求将超过传统hadoop。
所以基本上,对于较小的工作和集群中的巨大内存,sparks获胜。对于大多数集群来说,事实并非如此。
有关spark的更多详细信息,请参阅spark.apache.org
oknwwptz2#
对于迭代算法,spark比mapreduce快一个数量级,因为它通过将中间数据缓存在本地jvm中获得了显著的加速。
spark 1.1主要包括一个新的shuffle实现(基于排序的shuffle而不是基于哈希的shuffle),一个新的网络模块(基于netty而不是使用块管理器发送shuffle数据),一个新的外部shuffle服务使spark实现了最快的petabyte排序(在190个节点上,内存为46tb),并打破了hadoop的旧记录。
spark可以轻松地处理比集群聚合内存大一个数量级的数据集。所以,我认为spark正朝着正确的方向前进,最终会变得更好。
作为参考,本文解释了databricks是如何执行petabyte排序的。
p8ekf7hl3#
我想你说hadoop是指hdfs。
使用sparkoverhadoop有很多好处。
性能:spark至少和hadoop先生一样快,因为迭代算法(需要执行相同数据集的多次迭代)可以快几个数量级。map reduce将每个阶段的输出写入hdfs。
1.1. spark可以缓存(取决于可用内存)这个中间结果,从而减少由于磁盘io引起的延迟。
1.2. spark操作是懒惰的。这意味着spark可以在开始处理数据之前执行某些优化,因为它可以重新排序操作,因为它们尚未执行。
1.3. spark保留操作的沿袭,并在失败时基于该沿袭重新创建部分失败状态。
统一生态系统:spark为各种类型的分析提供了统一的编程模型—批处理(spark core)、交互式(repl)、流式处理(spark streaming)、机器学习(mllib)、图形处理(graphx)、sql查询(sparksql)
更加丰富和简单的api:spark的api更加丰富和简单。更丰富,因为它支持更多的操作(例如groupby、filter…)。更简单,因为这些功能结构的表现力。spark的api支持java、scala和python(对于大多数api)。有实验支持r。
多数据存储支持:spark支持许多现成的数据存储。您可以使用spark来分析普通或分布式文件系统中的数据,hdfs、amazons3、apachecassandra、apachehive和elasticsearch等等。我确信对许多其他流行数据存储的支持很快就会到来。如果您想采用spark,基本上不需要移动数据。
例如,下面是spark(scala)中单词计数的代码。
如果你使用的是标准的hadoop,我肯定你还得多写几行。
以下是一些关于spark的常见误解。
spark只是一个内存集群计算框架。然而,事实并非如此。当您的数据可以放入内存时,spark会表现出色,因为内存访问延迟较低。但是,即使您的数据集不完全适合内存,您也可以让它工作。
你需要学习scala来使用spark。spark是用scala编写的,在jvm上运行。但是spark也支持java和python中的大多数常见api。因此,您可以轻松开始使用spark而不必了解scala。
Spark不会缩放。spark仅适用于小型数据集(gbs),不能扩展到大量计算机或tbs数据。这也不是事实。它已成功地用于对数PB的数据进行排序
最后,如果您在hadoop mr中没有遗留的代码库,那么采用spark是非常有意义的,原因很简单,所有主要hadoop供应商都有充分的理由转向spark。