Spark和MapReduce之间的区别?
1
、性能方面
Spark
在内存中处理数据,而
MapReduce
是通过
map
和
reduce
操作在磁盘中处理数据。因此从这个角度上讲Spark
的性能应该是超过
MapReduce
的。
然而,既然在内存中处理,
Spark
就需要很大的内存容量。就像一个标准的数据库系统操作一样,
Spark每次将处理过程加载到内存之中,然后该操作作为缓存一直保持在内存中直到下一步操作。如果Spark与其它资源需求型服务一同运行在YARN
上,又或者数据块太大以至于不能完全读入内存,此时
Spark
的性能就会有很大的降低。
与此相反,
MapReduce
会在一个工作完成的时候立即结束该进程,因此它可以很容易的和其它服务共同运行而不会产生明显的性能降低。
当涉及需要重复读取同样的数据进行迭代式计算的时候,
Spark
有着自身优势。 但是当涉及单次读取、类似ETL
(抽取、转换、加载)操作的任务,比如数据转化、数据整合等时,
MapReduce
绝对是不二之选,因为它就是为此而生的。
小结
:当数据大小适于读入内存,尤其是在专用集群上时,
Spark
表现更好;
MapReduce
适用于那些数据不能全部读入内存的情况,同时它还可以与其它服务同时运行。
2
、使用难度方面
Spark
有着灵活方便的
Java
,
Scala
和
Python
的
API
,同时对已经熟悉
SQL
的技术员工来说,
Spark
还适用 Spark SQL
(也就是之前被人熟知的
Shark
)。多亏了
Spark
提供的简单易用的构造模块,我们可以很容易的编写自定义函数。它甚至还囊括了可以即时反馈的交互式命令模式。
Hadoop MapReduce
是用
Java
编写的,但由于其难于编程而备受诟病。尽管需要一定时间去学习语法,Pig还是在一定程度上简化了这个过程,
Hive
也为平台提供了
SQL
的兼容。一些
Hadoop
工具也可以无需编程直接运行MapReduce
任务。
Xplenty
就是一个基于
Hadoop
的数据整合服务,而且也不需要进行任何编程和部署。
尽管
Hive
提供了命令行接口,但
MapReduce
并没有交互式模式。诸如
Impala
,
Presto
和
Tez
等项目都在尝试希望为Hadoop
提供全交互式查询模式。
安装与维护方面,
Spark
并不绑定在
Hadoop
上,虽然在
Hortonworks
(
HDP 2.2
版)和
Cloudera
(
CDH 5版)的产品中Spark
和
MapReduce
都包含在其分布式系统中。(注:
Cloudera
,
Hortonworks
及
MapR
是Hadoop领域三大知名的初创公司,致力于打造更好的
Hadoop
企业版应用)。
小结
:
Spark
更易于编程,同时也包含交互式模式;
MapReduce
不易编程但是现有的很多工具使其更易于使用。
3
、成本方面
Spark
集群的内存至少要和需要处理的数据块一样大,因为只有数据块和内存大小合适才能发挥出其最优的性能。所以如果真的需要处理非常大的数据,Hadoop
绝对是合适之选,毕竟硬盘的费用要远远低于内存的费用。
考虑到
Spark
的性能标准,在执行相同的任务的时候,需要的硬件更少而运行速度却更快,因此应该是更合算的,尤其是在云端的时候,此时只需要即用即付。
在技术人员方面,即使
Hadoop
从
2005
年就开始普及,但是
MapReduce
方面的专家仍然存在着短缺。
而对于从
2010
年才开始普及的
Spark
,这又意味着什么呢? 或许投身
Spark
学习的人正在快速增加,但是相比于 Hadoop MapReduce
仍然存在着更大的技术人才的缺口。
进一步讲,现存了大量的
Hadoop
即服务的资料和基于
Hadoop
的服务(比如我们
Xplenty
的数据整合服务),这些都降低对技术人员能力和底层硬件知识的要求。相比之下,几乎没有现有可选的 Spark
服务,仅有的那些也是新产品。
小结
:根据基准要求,
Spark
更加合算, 尽管人工成本会很高。依靠着更多熟练的技术人员和
Hadoop 服务的供给, Hadoop MapReduce
可能更便宜。
4
、兼容性
Spark
既可以单独运行,也可以在
Hadoop YARN
上,或者在预置
Mesos
上以及云端。它支持实现Hadoop 输入范式的数据源,所以可以整合所有
Hadoop
支持的数据源和文件格式。 根据
Spark
官方教程, 它还可以通过 JDBC
和
ODBC
同
BI
(商业智能) 工具一起运行。
Hive
和
Pig
也在逐步实现这样的功能。
小结
:
Spark
和
Hadoop MapReduce
具有相同的数据类型和数据源的兼容性。
5
、数据处理
除了平常的数据处理,
Spark
可以做的远不止这点:
它还可以处理图和利用现有的机器学习库
。高性能也使得 Spark
在实时处理上的表现和批处理上的表现一样好。这也催生了一个更好的机遇,那就是用一个平台解决所有问题而不是只能根据任务选取不同的平台,毕竟所有的平台都需要学习和维护。
Hadoop MapReduce
在批处理上表现卓越
。如果需要进行实时处理,可以利用另外的平台比如
Storm或者 Impala
,而图处理则可以用
Giraph
。
MapReduce
过去是用
Mahout
做机器学习的,但其负责人已经将其抛弃转而支持 Spark
和
h2o
(机器学习引擎)。
小结
:
Spark
是数据处理的瑞士军刀;
Hadoop MapReduce
是批处理的突击刀。
6
、处理速度
Hadoop
是磁盘级计算,计算时需要在磁盘中读取数据;其采用的是
MapReduce
的逻辑,把数据进行切片计算用这种方式来处理大量的离线数据.
Spark
会在内存中以接近
“
实时
”
的时间完成所有的数据分析。
Spark
的批处理速度比
MapReduce
快近
10倍,内存中的数据分析速度则快近100
倍。
比如实时的市场活动,在线产品推荐等需要对流数据进行分析场景就要使用
Spark
。