Hadoop和Spark方面要记住的最重要一点就是,它们并非非此即彼的关系,由于它们不是相互排斥,也不是说一方是另外一方的简易替代者。二者彼此兼容,这使得这对组合成为一种功能极其强大的解决方案,适合诸多大数据应用场合。数据库
Hadoop的定义编程
Hadoop是Apache.org的一个项目,实际上是一种软件库和框架,以便使用简单的编程模型,跨计算器集群对庞大数据集(大数据)进行分布式 处理。Hadoop可灵活扩展,从单一计算机系统,到提供本地存储和计算能力的数千个商用系统,它都能轻松支持。实际上,Hadoop就是大数据分析领域 的重量级大数据平台。api
Hadoop由协同运行、构建Hadoop框架的多个模块组成。Hadoop框架的主要模块包括以下:缓存
虽然上述四个模块构成了Hadoop的核心,不过还有其余几个模块。这些模块包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它们进一步加强和扩展了Hadoop的功能,得以扩大到大数据应用领域,处理庞大数据集。安全
许多使用大数据集和分析工具的公司使用Hadoop。它已成为大数据应用系统中事实上的标准。设计Hadoop的初衷是处理这项任务:搜寻和搜索数 十亿个网页,将这些信息收集到数据库中。正是因为渴望搜寻和搜索互联网,才有了Hadoop的HDFS及分布式处理引擎MapReduce。服务器
若是数据集变得极其庞大或极其复杂,以致于当前的解决方案没法在数据用户认为合理的时间段内有效地处理信息,Hadoop对公司就会大有用处。框架
MapReduce是一种出色的文本处理引擎,它理应如此,由于搜寻互联网和搜索互联网(它的首要任务)都是基于文本的任务。机器学习
Spark的定义分布式
Apache Spark开发人员声称它是“一种用于数据大规模处理的快速通用引擎”。相比之下,若是说Hadoop的大数据框架比如是800磅重的大猩猩,Spark就比如是130磅重的猎豹。函数
虽然批评Spark的内存处理技术的人士认可,Spark确实速度很快(最多比Hadoop MapReduce快100倍),但他们可能并不肯意认可它在磁盘上运行起来速度最多快10倍。Spark还能够执行批量处理,然而它真正擅长的是处理流工做负载、交互式查询和基于机器的学习。
相比MapReduce基于磁盘的批量处理引擎,Spark赖以成名之处是其数据实时处理功能。Spark与Hadoop及其模块兼容。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。
Spark有本身的页面,由于虽然它能够经过YARN(另外一种资源协调者)在Hadoop集群中运行,可是它也有一种独立模式。它能够做为 Hadoop模块来运行,也能够做为独立解决方案来运行;这样一来,很难直接比较二者。然而随着时间的推移,一些大数据科学家预计Spark会出现分叉,可能会取代Hadoop,尤为是在更快速地访问处理的数据相当重要的状况下。
Spark是一种集群计算框架,这意味着它更多地与MapReduce竞争,而不是与整个Hadoop生态系统竞争。好比说,Spark没有本身的分布式文件系统,但可使用HDFS。
Spark使用内存,也可使用磁盘进行处理,而MapReduce彻底基于磁盘。MapReduce和Spark的主要区别在于,MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDDS),下面容错部分有更详细的解释。
性能
网上不缺关于Spark与MapReduce相比有多快的信息。对二者进行比较有个问题,那就是它们处理数据的方式不同,数据处理部分有介绍。Spark之因此如此快速,缘由在于它在内存中处理一切数据。没错,它还可使用磁盘来处理未所有装入到内存中的数据。
Spark的内存处理为来自多个来源的数据提供了近乎实时分析的功能:营销活动、机器学习、物联网传感器、日志监控、安全分析和社交媒体网站。另 外,MapReduce使用批量处理,其实历来就不是为惊人的速度设计的。它的初衷是不断收集来自网站的信息,不须要这些数据具备实时性或近乎实时性。
易用性
众所周知,Spark以性能见长,可是它也因易用性而小有名气,缘由是它随带易于使用的API,支持Scala(原生语言)、Java、Python和Spark SQL。Spark SQL很是相似于SQL 92,因此几乎不须要经历一番学习,立刻能够上手。
Spark还有一种交互模式,那样开发人员和用户均可以得到查询和其余操做的即时反馈。MapReduce没有交互模式,不过有了Hive和Pig等附加模块,采用者使用MapReduce来得容易一点。
成本
MapReduce和Spark都是Apache项目,这意味着它们是开源免费软件产品。虽然软件不须要成本,可是派人用硬件运行任何一种平台带来了成本。这两种产品都设计成能够在商用硬件上运行,好比所谓的低成本白盒服务器系统。
MapReduce和Spark在一样的硬件上运行,那么这两种解决方案的成本差别体如今哪里?MapReduce使用常规数量的内存,由于数据处 理基于磁盘,因此公司得购买速度更快的磁盘和大量磁盘空间来运行MapReduce。MapReduce还须要更多的系统,将磁盘输入/输出分布到多个系 统上。
Spark须要大量内存,可是可使用常规数量的常规转速磁盘。一些用户抱怨会产生临时文件,须要清理。这些临时文件一般保存7天,以便加快针对同 一数据集的任何处理。磁盘空间相对便宜,因为Spark不使用磁盘输入/输入用于处理,已使用的磁盘空间能够用于SAN或NAS。
然而,因为须要大量内存在内存中处理一切数据,Spark系统的成本更高,这点没错。可是Spark的技术同时减小了所需的系统数量。因此,最后的 情形是,系统成本较高,可是数量大大减小。也许到时候,Spark实际上能够下降每一个计算单位的成本,尽管内存方面有额外的要求。
举例说明,“Spark已证实在数据多达PB的状况下也轻松自如。它被用于在数量只有十分之一的机器上,对100TB数据进行排序的速度比Hadoop MapReduce快3倍。”这一成绩让Spark成为2014年Daytona GraySort基准。
兼容性
MapReduce和Spark相互兼容;MapReduce经过JDBC和ODC兼容诸多数据源、文件格式和商业智能工具,Spark具备与MapReduce一样的兼容性。
数据处理
MapReduce是一种批量处理引擎。MapReduce以顺序步骤来操做,先从集群读取数据,而后对数据执行操做,将结果写回到集群,从集群读 取更新后的数据,执行下一个数据操做,将那些结果写回到结果,依次类推。Spark执行相似的操做,不过是在内存中一步执行。它从集群读取数据后,对数据 执行操做,而后写回到集群。
Spark还包括本身的图形计算库GraphX。GraphX让用户能够查看与图形和集合一样的数据。用户还可使用弹性分布式数据集(RDD),改变和联合图形,容错部分做了讨论。
容错
至于容错,MapReduce和Spark从两个不一样的方向来解决问题。MapReduce使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)。若是没有心跳,那么JobTracker节点从新调度全部将执行的操做和正在进行的操做,交 给另外一个TaskTracker节点。这种方法在提供容错性方面颇有效,但是会大大延长某些操做(即使只有一个故障)的完成时间。
Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操做。RDD能够引用外部存储系统中的数据集,好比共享式文件系统、HDFS、HBase,或者提供Hadoop InputFormat的任何数据源。Spark能够用Hadoop支持的任何存储源建立RDD,包括本地文件系统,或前面所列的其中一种文件系统。
RDD拥有五个主要属性:
RDD可能具备持久性,以便将数据集缓存在内存中。这样一来,之后的操做大大加快,最多达10倍。Spark的缓存具备容错性,缘由在于若是RDD的任何分区丢失,就会使用原始转换,自动从新计算。
可扩展性
按照定义,MapReduce和Spark均可以使用HDFS来扩展。那么,Hadoop集群能变得多大呢?
据称雅虎有一套42000个节点组成的Hadoop集群,能够说扩展无极限。最大的已知Spark集群是8000个节点,不过随着大数据增多,预计集群规模也会随之变大,以便继续知足吞吐量方面的预期。
安全
Hadoop支持Kerberos身份验证,这管理起来有麻烦。然而,第三方厂商让企业组织可以充分利用活动目录Kerberos和LDAP用于身份验证。一样那些第三方厂商还为传输中数据和静态数据提供数据加密。
Hadoop分布式文件系统支持访问控制列表(ACL)和传统的文件权限模式。Hadoop为任务提交中的用户控制提供了服务级受权(Service Level Authorization),这确保客户拥有正确的权限。
Spark的安全性弱一点,目前只支持经过共享密钥(密码验证)的身份验证。Spark在安全方面带来的好处是,若是你在HDFS上运行Spark,它可使用HDFS ACL和文件级权限。此外,Spark能够在YARN上运行,于是可以使用Kerberos身份验证。
总结Hadoop vs Spark
乍一看,对任何大数据应用而言,使用Spark彷佛是默认选择。然而,事实并不是如此。MapReduce已在大数据市场取得了进展,尤为受到这种公司企业的追捧:须要由商用系统对庞大数据集加以控制。Spark的速度、灵活性和相对易用性对MapReduce的低操做成原本说是绝对补充。
实际上,Spark与MapReduce是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,好比分布式文件系统,而Spark 为须要它的那些数据集提供了实时内存处理。完美的大数据场景正是设计人员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。
单独说一下Spark 和 MapReduce
一、spark把运算的中间数据存放在内存,迭代计算效率更高;mapreduce的中间结果须要落地,须要保存到磁盘,这样必然会有磁盘io操作,影响性能。 二、spark容错性高,它经过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,能够经过整个数据集的计算流程的血缘关系来实现重建;mapreduce的话容错可能只能从新计算了,成本较高。 三、spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块、图计算GraphX等等;mapreduce只提供了map和reduce两种操做,流计算以及其余模块的支持比较缺少。 四、spark框架和生态更为复杂,首先有RDD、血缘lineage、执行时的有向无环图DAG、stage划分等等,不少时候spark做业都须要根据不一样业务场景的须要进行调优已达到性能要求;mapreduce框架及其生态相对较为简单,对性能的要求也相对较弱,可是运行较为稳定,适合长期后台运行。