Hadoop框架的紧张模块包括如下:
Hadoop CommonHadoop分布式文件系统(HDFS)Hadoop YARNHadoop MapReduce虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些模块包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它们进一步增强和扩展了Hadoop的功能。
Spark确实速率很快(最多比Hadoop MapReduce快100倍)。Spark还可以实行批量处理,然而它真正善于的是处理流事情负载、交互式查询和机器学习。

比较MapReduce基于磁盘的批量处理引擎,Spark赖以成名之处是其数据实时处理功能。Spark与Hadoop及其模块兼容。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。
Spark有自己的页面,由于虽然它可以通过YARN(另一种资源折衷者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为 Hadoop模块来运行,也可以作为独立办理方案来运行。
MapReduce和Spark的紧张差异在于,MapReduce利用持久存储,而Spark利用弹性分布式数据集(RDDS)。
性能
Spark之以是如此快速,缘故原由在于它在内存中处理统统数据。没错,它还可以利用磁盘来处理未全部装入到内存中的数据。
Spark的内存处理为来自多个来源的数据供应了近乎实时剖析的功能:营销活动、机器学习、物联网传感器、日志监控、安全剖析和社交媒体网站。另 外,MapReduce利用批量处理,实在从来就不是为惊人的速率设计的。它的初衷是不断网络来自网站的信息,不须要这些数据具有实时性或近乎实时性。
易用性
支持Scala(原生措辞)、Java、Python和Spark SQL。Spark SQL非常类似于SQL 92,以是险些不须要经历一番学习,立时可以上手。
Spark还有一种交互模式,那样开拓职员和用户都可以得到查询和其他操作的即时反馈。MapReduce没有交互模式,不过有了Hive和Pig等附加模块,采取者利用MapReduce来得随意马虎一点。
本钱
“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的项目列表面向键值RDD的分区程序(比如说RDD是散列分区),这是可选属性打算每个分片的首选位置的列表(比如HDFS文件的数据块位置),这是可选属性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身份验证。
总结
Spark与MapReduce是一种相互共生的关系。Hadoop供应了Spark所没有的功能特性,比如分布式文件系统,而Spark 为须要它的那些数据集供应了实时内存处理。完美的大数据场景正是设计职员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。
然后看这篇文章:Link
2009年加州大学伯克利分校团队开始了Apache Spark项目,旨在为分布式数据处理设计一个统一的引擎。 Spark具有类似于MapReduce的编程模型,但是利用称为“弹性分布式数据集”RDDs的数据共享抽象扩展。
Spark的通用性有几个主要的好处。
首先,运用程序更随意马虎开拓,由于它们利用统一的API。
第二,结合处理任务更有效;而先前的系统须要将数据写入存储以将其通报给另一个引擎,Spark可以在相同的数据(常日在存储器中)上运行不同的功能。
末了,Spark启用了以前系统无法实现的新运用程序(如图形上的交互式查询和流式打算机学习)。自2010年发布以来,Spark已经发展成为最生动的开源项目或大数据处理,拥有超过1,000名贡献者。该项目已在超过1,000个组织中利用,从技能公司到银行、零售、生物技能和天文学。
Spark中的关键编程抽象是RDD,它是容错凑集,可以并行处理集群中的工具。用户通过“转换”(例如map、filter和groupBy)操作来创建RDD。
lines = spark.textFile(\"大众hdfs://...\"大众)
errors = lines.filter(s => s.startsWith(\公众ERROR\"大众))
println(\公众Total errors: \"大众+errors.count())
Spark评估RDDs延迟,考试测验为用户运算找到一个有效的操持。特殊的是,变换返回表示打算结果的新RDD工具,但不立即打算它。当一个动作被调用时,Spark查看全体用于创建实行操持的转换的图。例如,如果一行中有多个过滤器或映射操作,Spark可以将它们领悟到一个通报中,或者如果知道数据是被分区的,它可以避免通过网络为groupBy进行数据通报。因此用户可以实现程序模块化,而不会造成性能低下。
末了,RDDs为打算之间的数据共享供应了明确的支持。默认情形下,RDD是“短暂的”,由于它们每次在动作(例如count)利用时被重新打算。但是,用户还可以将所选的RDD保留在内存中或快速重用。(如果数据不适宜内存,Spark还会将其溢出到磁盘。)例如,用户在HDFS中搜索大量日志数据集来进行缺点调试时,可以通过调用以下函数来载入不同集群的缺点信息到内存中:
errors.persist()
随后,用户可以在该内存中数据上运行不同的查询:
// Count errors mentioning MySQL
errors.filter(s => s.contains(\"大众MySQL\公众)).count()
// Fetch back the time fields of errors that
// mention PHP, assuming time is field #3:
errors.filter(s => s.contains(\"大众PHP\"大众)).map(line => line.split('t')(3)).collect()
容错
除了供应数据共享和各种并行操作,RDDs还可以自动从故障中规复。 传统上,分布式打算系统通过数据复制或检讨点供应了容错。 Spark利用一种称为“lineage”的新方法。每个RDD跟踪用于构建它的转换图,并对基本数据重新运行这些操作,以重修任何丢失的分区。
下图显示了我们以前的查询中的RDD,个中我们通过运用两个过滤器和一个映射来获取缺点的韶光字段。 如果RDD的任何分区丢失(例如保存内存分区的缺点的节点失落败),Spark将通过在HDFS文件的相应块上的运用过滤器来重修它。 对付将数据从所有节点发送到所有其他节点(例如reduceByKey)的“shuffle”操作,发送方在本地保留其输出数据,以防吸收器涌现缺点。
基于沿袭的规复比数据密集型事情负载中的复制效率高得多。 它节省了韶光,由于写入RAM要比通过网络写入数据快。 规复常日比大略地重新运行程序快得多,由于故障节点常日包含多个RDD分区,这些分区可以在其他节点上并行重修。
其余一个繁芜些的例子:
Spark中逻辑回归的实现。 它利用批量梯度低落,一个大略的迭代算法,重复打算数据上的梯度函数作为并行求和。 Spark可以方便地将数据加载到RAM中,并运行多个求和。 因此,它运行速率比传统的MapReduce快。 例如,在100GB作业中,MapReduce每次迭代须要110秒,由于每次迭代需从磁盘加载数据,而Spark在第一次加载后每次迭代只须要一秒。
与存储系统的整合
与Google的MapReduce非常相似,Spark旨在与多个外部系统一起利用持久存储。Spark最常用于集群文件系统,如HDFS和键值存储,如S3和Cassandra。 它还可以作为数据目录与Apache Hive连接。 RDD常日仅在运用程序中存储临时数据,但某些运用程序(例如Spark SQL JDBC做事器)也在多个用户之间共享RDD。Spark作为存储系统无关引擎的设计,利用户可以轻松地对现有数据进走运算和连接各种数据源。
库
Spark SQL中尚未实现的一种技能是索引,只管Spark上的其他库(如IndexedRDDs)确实利用它。
Spark Streaming(流)。 Spark Streaming利用称为“离散流”的模型实现增量流处理。为了通过Spark实现流式传输,我们将输入数据分成小批量(例如每200毫秒),我们定期与RDD中存储的状态组合以产生新结果。以这种办法运行流打算比传统的分布式流系统有几个好处。例如,由于利用沿袭,故障规复更便宜,并且可以将流与批处理和交互式查询组合。
GraphX。 GraphX供应了类似于Pregel和GraphLab的图形打算接口,1通过为其构建的RDD选择分区函数来实现与这些系统相同的布局优化(例如顶点分区方案)。
MLlib。 MLlib,Spark的机器学习库,实现了50多种常见的分布式模型演习算法。例如,它包括决策树(PLANET),Latent Dirichlet分布和交替最小二乘矩阵分解的常见分布式算法。
Spark的库都对RDD进行操作,作为数据抽象,使得它们在运用程序中易于组合。例如,下图显示了一个程序,它利用Spark SQL读取一些历史Twitter数据,利用MLlib演习一个K-means聚类模型,然后将该模型运用于一个新的tweet流。每个库返回的数据任务(这里是历史性的tweet RDD和K-means模型)很随意马虎通报给其他库。
性能
比较了Spark对三个大略任务(SQL查询,流字计数和交替最小二乘矩阵分解)与其他引擎的性能。虽然结果随着事情负载的不同而不同,但Spark常日与Storm,GraphLab和Impala等专用系统相称。对付流处理,虽然我们显示了Storm上分布式实现的结果,但是每个节点的吞吐量也可以与商业流引擎如Oracle CEP相媲美。
交互式查询
互动利用Spark分为三个紧张种别。首先,组织常日通过商业智能工具(如Tableau)利用Spark SQL进行关系查询。例子包括eBay和百度。第二,开拓职员和数据科学家可以通过shell或可视化条记本环境以交互办法利用Spark的Scala,Python和R接口。这种交互式利用对付提出更高等的问题和设计终极导致生产运用程序的模型至关主要,并且在所有支配中都很常见。第三,一些供应商已经开拓了在Spark上运行的特定领域的交互式运用程序。示例包括Tresata(反洗钱),Trifacta(数据清理)和PanTera。
利用的Spark组件
我们看到许多组件被广泛利用,Spark Core和SQL最受欢迎。 Streaming在46%的组织中利用,机器学习在54%中利用。虽然在图9中未直接示出,但大多数组织利用多个组件; 88%利用个中至少两个,60%利用至少三个(如Spark Core和两个库),27%利用至少四个组件。
支配环境
虽然第一个Spark支配常日在Hadoop环境中,在2015年7月Spark调查中,仅有40%的支配在Hadoop YARN集群管理器上。此外,52%的受访者在公共云上运行Spark。
模型能力
MapReduce在跨韶光段共享数据方面效率低下,由于它依赖于复制的外部存储系统来实现此目的。
RDDs建立在Map-Reduce仿照任何分布式打算的能力之上,但更有效率。它们的紧张限定是由于每个通信步骤中的同步而增加的等待韶光,但是该等待韶光的丢失与所得比较是可以忽略的。
范例的Hadoop集群可能具有以下特性:
本地存储。每个节点具有本地存储器,大约50GB/s的带宽,以及10到20个本地磁盘,大约1GB/s到2GB/ s的磁盘带宽。
链接。每个节点具有10Gbps(1.3GB/s)链路,或者比其存储器带宽小约40x,并且比其总的磁盘带宽小2倍。
机架。节点被组织成20到40台机器的机架,每个机架的带宽为40Gbps-80Gbps,或者机架内网络性能的2-5倍。
给定这些属性,在许多运用中最主要的性能问题是在网络中放置数据和打算。幸运的是,RDD供应了掌握这种放置的举动步伐;该接口许可运用程序在输入数据附近放置打算(通过用于输入源25的“优选位置”的API),并且RDD供应对数据分区和共置(例如指天命据被给定密钥散列)的掌握。
除了网络和I / O带宽,最常见的瓶颈每每是CPU韶光,特殊是如果数据在内存中。在这种情形下,Spark可以运行在每个节点上的专用系统中利用的相同的算法和库。例如,它利用Spark SQL中的列存储和处理,MLlib中的本机BLAS库等。正如我们之前谈论的,RDD明显增加本钱的唯一区域是网络延迟。
Spark在shuffle阶段实现了一个障碍,以是reduce任务不会开始,直到所有的Map已经完成。这避免了故障规复所需的一些繁芜性。虽然删除一些这些功能将加快系统。但默认情形下,我们在Spark中会保持开启容错,以便于对运用程序进行容错处理。
结语
可扩展数据处理对付下一代打算机运用是必不可少的,但常日涉及不同的打算系统。为了简化这个任务,Spark项目为大数据运用程序引入了统一的编程模型和引擎。实践证明,这样的模型可以有效地支持当前的事情负荷,并为用户带来本色性的好处。