MapReduce和Spark的区别

性能:

Spark是在内存中处理数据的,而MapReduce是经过map和reduce操做在磁盘中处理数据,因此正常状况下Spark的处理速度会比mapreduce快。可是当数据量大,不能一次性加载到内存的时候,Spark性能就会下降。编程

读取一样的数据进行迭代计算的话使用Spark,一次性读取或者ETL用mapreduce更好。安全

小结:当数据大小适于读入内存,尤为是在专用集群上时,Spark 表现更好;Hadoop MapReduce 适用于那些数据不能所有读入内存的状况,同时它还能够与其它服务同时运行。服务器

 

使用难度

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 和 Hadoop MapReduce 都包含在其分布式系统中。(注: Cloudera, Hortonworks 及 MapR 是 Hadoop 领域三大知名的初创公司,致力于打造更好的 Hadoop 企业版应用)。分布式

小结:Spark 更易于编程,同时也包含交互式模式;Hadoop MapReduce 不易编程可是现有的不少工具使其更易于使用。函数

成本

Spark 和 Hadoop MapReduce 都是开源的,可是机器和人工的花费还是不可避免的。工具

这两个框架既能够在商用服务器上也能够运行在云端,下表能够看到它们有着类似的硬件需求:oop

框架                 Apache Spark                        Apache Hadoop balanced workload slaves

内核                      8–16                                                           4

内存             8 GB 到数百GB                                                24 GB

硬盘                      4–8                                                        4–6 1TB

网络                10 GB 或更多                                           1 GB 以太网

Spark 集群的内存至少要和须要处理的数据块同样大,由于只有数据块和内存大小合适才能发挥出其最优的性能。因此若是真的须要处理很是大的数据,Hadoop 绝对是合适之选,毕竟硬盘的费用要远远低于内存的费用。

考虑到 Spark 的性能标准,在执行相同的任务的时候,须要的硬件更少而运行速度却更快,所以应该是更合算的,尤为是在云端的时候,此时只须要即用即付。

在技术人员方面,即便 Hadoop 从 2005 年就开始普及,可是 MapReduce 方面的专家仍然存在着短缺。而对于从 2010 年才开始普及的 Spark ,这又意味着什么呢? 或许投身 Spark 学习的人正在快速增长,可是相比于 Hadoop MapReduce 仍然存在着更大的技术人才的缺口。

进一步讲,现存了大量的 Hadoop 即服务的资料和基于 Hadoop 的服务(好比咱们 Xplenty 的数据整合服务),这些都下降对技术人员能力和底层硬件知识的要求。相比之下,几乎没有现有可选的 Spark 服务,仅有的那些也是新产品。

小结:根据基准要求, Spark 更加合算, 尽管人工成本会很高。依靠着更多熟练的技术人员和 Hadoop 即服务的供给, Hadoop MapReduce 可能更便宜。

兼容性

Spark 既能够单独运行,也能够在 Hadoop YARN 上,或者在预置 Mesos 上以及云端。它支持实现 Hadoop 输入范式的数据源,因此能够整合全部 Hadoop 支持的数据源和文件格式。 根据 Spark 官方教程, 它还能够经过 JDBC 和 ODBC 同 BI(商业智能) 工具一块儿运行。 Hive 和 Pig 也在逐步实现这样的功能。

小结: Spark 和 Hadoop MapReduce 具备相同的数据类型和数据源的兼容性。

数据处理

除了日常的数据处理,Spark 能够作的远不止这点:它还能够处理图和利用现有的机器学习库。高性能也使得 Spark 在实时处理上的表现和批处理上的表现同样好。这也催生了一个更好的机遇,那就是用一个平台解决全部问题而不是只能根据任务选取不一样的平台,毕竟全部的平台都须要学习和维护。

Hadoop MapReduce 在批处理上表现卓越。若是须要进行实时处理,能够利用另外的平台好比  Storm 或者 Impala,而图处理则能够用 Giraph。MapReduce 过去是用 Mahout 作机器学习的,但其负责人已经将其抛弃转而支持 Spark 和 h2o(机器学习引擎)。

小结:Spark 是数据处理的瑞士军刀;Hadoop MapReduce 是批处理的突击刀。

容错

和 MapReduce 同样, Spark 会重试每一个任务并进行预测执行。然而,MapReduce 是依赖于硬盘驱动器的,因此若是一项处理中途失败,它能够从失败处继续执行,而 Spark 则必须从头开始执行,因此 MapReduce 这样节省了时间。

小结:Spark 和 Hadoop MapReduce 都有着较好的容错能力,可是 Hadoop MapReduce 要稍微更好一点。

安全性

在安全性上, 此时的 Spark 还略显不足。 受权验证由共享秘钥机制支持,网络用户接口则经过 servlet 过滤器和事件日志保护。Spark 能够运行在 YARN 上并配合使用 HDFS, 这也就意味着它同时还拥有 Kerberos 认证受权验证,HDFS 文件许可机制和节点间的加密机制。

Hadoop MapReduce 拥有全部 Hadoop 支持的安全机制,同时也整合了其它基于 Hadoop 的安全项目, 好比  Knox 网关和  Sentry。志在解决 Hadoop 安全的  Rhino 项目也只是在添加 Sentry 支持时添加了 Spark 支持。不然 Spark 开发者们只能本身去提高其安全性了。

小结: Spark 的安全机制仍处在发展期。 Hadoop MapReduce 拥有更多安全控制机制和项目。

总结

Spark 是大数据领域冉冉升起的新星,可是 Hadoop MapReduce 仍有着较广的应用领域。

在内存中进行数据处理使得 Spark 具备较好的性能表现,也比较高效合算。它兼容全部 Hadoop 的数据源和文件格式, 支持多种语言的简单易用的 API 也令人们更快速的能够上手。 Spark 甚至实现了图处理和机器学习工具。

Hadoop MapReduce 是一个更加成熟的平台,为进行批处理而生。当遇到确实很是大的数据以致于没法彻底读入内存,又或是依靠着大量对该平台有经验的技术人员,它可能会比 Spark 更加合算。 并且围绕 Hadoop MapReduce 的衍生系统正在依靠着更多的支撑项目、工具和云服务而更加壮大。

可是即便看上去 Spark 像是最终的赢家,问题在于咱们永远不会单独使用它—咱们须要 HDFS 存储数据,或许还会须要用到 HBase,Hive,Pig,Impala 或其余 Hadoop 项目。这意味着在处理很是大的数据的时候,Spark 仍然须要同 Hadoop 和 MapReduce 共同运行。

相关文章
相关标签/搜索