Spark 是否真的比 MapReduce 技高一筹

Apache 基金会下的 Spak 再次引爆了大数据的话题。带着比 Hadoop MapReduce 速度要快 100 倍的承诺以及更加灵活方便的 API,一些人认为这或许预示着 Hadoop MapReduce 的终结。

作为一个开源的数据处理框架,Spark 是如何做到如此迅速地处理数据的呢?秘密就在于它是运行在集群的内存上的,而且不受限于 MapReduce 的二阶段范式。这大大加快了重复访问同一数据的速度。

Spark 既可以单独运行,也可以运行在 Hadoop YARN 上(注:Hadoop第二代框架中的改进框架,用于将资源管理和处理组件分开,基于YARN的结构不受 MapReduce 约束),此时 Spark 可以直接从 HDFS (Hadoop Distributed File System 分布式文件系统)中读取数据。 诸如 Yahoo(雅虎)、Intel(因特尔)、Baidu(百度)、Trend Micro(趋势科技)和 Groupon(高朋)等公司已经在使用 Spark 了。

听上去好像 Spark 已经注定要取代 Hadoop MapReduce 了。但真的是这样吗?本文我们将对比这两个平台来看看是否 Spark 真的技高一筹。

性能

Spark 在内存中处理数据,而 Hadoop MapReduce 是通过 map 和 reduce 操作在磁盘中处理数据。因此从这个角度上讲 Spark 的性能应该是超过 Hadoop MapReduce 的。

然而,既然在内存中处理,Spark 就需要很大的内存容量。就像一个标准的数据库系统操作一样, Spark 每次将处理过程加载到内存之中,然后该操作作为缓存一直保持在内存中直到下一步操作。如果 Spark 与其它资源需求型服务一同运行在 Hadoop YARN 上,又或者数据块太大以至于不能完全读入内存,此时 Spark 的性能就会有很大的降低。

与此相反, MapReduce 会在一个工作完成的时候立即结束该进程,因此它可以很容易的和其它服务共同运行而不会产生明显的性能降低。

当涉及需要重复读取同样的数据进行迭代式计算的时候,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 都是开源的,但是机器和人工的花费仍是不可避免的。

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

  • 框架 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 共同运行。

本文作者:古月水语

来源:51CTO

时间: 2024-12-21 22:09:23

Spark 是否真的比 MapReduce 技高一筹的相关文章

【Spark Summit East 2017】EasyMapReduce:利用Spark与Docker以MapReduce方式赋能大规模科学工具

本讲义出自Marco Cappucini在Spark Summit East 2017上的演讲,主要介绍了如何通过借助Spark和Docker在分布式数据集上使串行软件能够并行运行,瑞典的Uppsala大学开发了基于Spark的能够以MapReduce方式运行Docker容器的实用程序EasyMapReduce,分享了面对处理大型分布式数据集的挑战,EasyMapReduce是如何帮助实现科学研究的.

Spark:超越Hadoop MapReduce

和 Hadoop 一样,Spark 提供了一个 Map/Reduce API(分布式计算)和分布式存储.二者主要的不同点是,Spark 在集群的内存中保存数据,而 Hadoop 在集群的磁盘中存储数据. 大数据对一些数据科学团队来说是 主要的挑战,因为在要求的可扩展性方面单机没有能力和容量来运行大规模数据处 理.此外,即使专为大数据设计的系统,如 Hadoop,由于一些数据的属性问题也很难有效地处理图数据,我们将在本章的其他部分看到这方面的内容. Apache Spark 与 Hadoop 类似

如何用Spark解决一些经典MapReduce问题?

Spark是一个Apache项目,它被标榜为"快如闪电的集群计算".它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目.Spark提供了一个更快.更通用的数据处理平台.和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍.同时spark也让传统的map reduce job开发变得更加简单快捷.本文将简单介绍几个经典hadoop的mr按理用spark实现,来让大家熟悉spark的开发. 最大值最小值 求最大值最小值一直是

Spark的企业应用时代真的来了吗?

自5月30日阿帕奇软件基金会宣布发布开源平台Spark 1.0以来,Spark就屡登头条,备受数据专家关注.但是,Spark的企业应用时代真的来了吗? 从近期举办的美国Spark峰会上来看,大家对Spark技术还是充满信心的.Spark通常被认为是实时处理环境,应用于Hadoop. NoSQL数据库.AWS和关系型数据库上,可作为应用程序接口API来使用,程序员通过共同的程序处理数据.Spark的功能包括SQL查询引擎.机器学习算法.图处理引擎和流数据处理引擎. 很多Hadoop供应商都将Spa

Spark取代MapReduce成为Apache顶级项目

Apache Spark是一种内存数据处理框架,目前已经升级成为Apche的顶级项目,这有助于提高Spark的稳定性,在下一代大数据应用中取代MapReduce的地位. Spark最近势头很猛,大有取代MapReduce的趋势.本周二Apache软件基金会宣布Spark升级成为顶级项目. 由于性能和速度由于MapReduce,且更加容易使用,Spark目前已经拥有一个庞大的用户和贡献者社区.这意味着Spark更加符合下一代低延迟.实时处理.迭代计算的大数据应用的要求. Spark的创建者来自加州

一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮.但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择. 大数据,首先你要能存的下大数据. 传统的文件系统是单机的,不能横跨不同的机器.HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据

Spark:大数据的“电光石火”

Spark已正式申请加入Apache孵化器,从灵机一闪的实验室"电火花"成长为大数据技术平台中异军突起的新锐.本文主要讲述Spark的设计思想.Spark如其名,展现了大数据不常见的"电光石火".具体特点概括为"轻.快.灵和巧". 轻:Spark 0.6核心代码有2万行,Hadoop 1.0为9万行,2.0为22万行.一方面,感谢Scala语言的简洁和丰富表达力:另一方面,Spark很好地利用了Hadoop和Mesos(伯克利 另一个进入孵化器的

【PDF大放送】Spark&Hadoop Summit精选分享PDF合集

大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具,锅碗瓢盆,各有各的用处,互相之间又有重合.你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮.但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择. Hadoop是一个分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(Had

Spark 安装配置简单测试

简介 Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法. Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之