每年,市场上都会呈现种种不同的数据办理规划、类型与速度体现的分布式体系。在这些体系中,Spark和hadoop是取得最大重视的两个。可是该怎样判别哪一款合适你?
假如想批处理流量数据,并将其导入HDFS或运用Spark Streaming是否合理?假如想要进行机器学习和猜测建模,Mahout或MLLib会更好地满意您的需求吗?
为了添加混杂,Spark和Hadoop常常与坐落HDFS,Hadoop文件体系中的Spark处理数据一同作业。可是,它们都是独立个别,每一个别都有自己的长处和缺陷以及特定的商业事例。
本文将从以下几个视点对Spark和Hadoop进行比照:体系结构,功能,本钱,安全性和机器学习。
什么是Hadoop?
Hadoop在2006年开端成为yahoo项目,随后成为尖端的Apache开源项目。它是一种通用的分布式处理方法,具有多个组件:
HDFS(分布式文件体系),它将文件以Hadoop本机格局存储,并在集群中并行化;
YARN,和谐运用程序运转时的调度程序;
MapReduce,实践并行处理数据的算法。
Hadoop运用Java树立,可经过多种编程言语拜访,用于经过Thrift客户端编写MapReduce代码(包含Python)。
除了这些根本组件外,Hadoop还包含:
Sqoop,它将联系数据移入HDFS;
Hive,一种相似SQL的接口,答运用户在HDFS上运转查询;
Mahout,机器学习。
除了将HDFS用于文件存储之外,Hadoop现在还能够装备为运用S3存储桶或Azure blob作为输入。
它能够经过Apache发行版开源,也能够经过Cloudera(规划和规模最大的Hadoop供货商),MapR或HortonWorks等厂商供给。
什么是Spark?
Spark是一个较新的项目,开始于2012年在加州大学伯克利分校的AMPLab开发。它也是一个尖端Apache项目,专心于在群会集并行处理数据,但最大的差异在于它在内存中运转。
鉴于Hadoop读取和写入文件到HDFS,Spark运用称为RDD,弹性分布式数据集的概念处理RAM中的数据。 Spark能够以独立形式运转,Hadoop集群可用作数据源,也能够与Mesos一同运转。在后一种情况下,Mesos主站将替代Spark主站或YARN以进行调度。
Spark是环绕Spark Core树立的,Spark Core是驱动调度,优化和RDD笼统的引擎,并将Spark衔接到正确的文件体系(HDFS,S3,RDBM或ElasTIcsearch)。有几个库在Spark Core上运转,包含Spark SQL,它答应在分布式数据集上运转相似SQL的指令,用于机器学习的MLLib,用于图形问题的GraphX以及答应接连流式传输的流式传输记载数据。
Spark有几个API。原始界面是用Scala编写的,依据数据科学家的很多运用,还添加了Python和R端点。 Java是编写Spark作业的另一种挑选。
Databricks由也Spark创始人Matei Zaharia创立的,致力于供给依据 Spark 的云服务,可用于数据集成,数据管道等使命
1. 架构
Hadoop
首要,一切传入HDFS的文件都被切割成块。依据装备的块巨细和仿制因子,每个块在整个群会集被仿制指定的次数。该信息被传递给NameNode,它盯梢整个集群中的一切内容。 NameNode将这些文件分配给一些数据节点,然后将这些文件写入其间。 2012年施行高可用性,答应NameNode毛病转移到备份节点上,以盯梢群会集的一切文件。
MapReduce算法坐落HDFS之上,由JobTracker组成。一旦运用程序以其间一种言语编写,Hadoop承受JobTracker,然后分配作业(可包含核算单词和整理日志文件的任何内容),以便在存储在Hive库房中的数据之上运转HiveQL查询)到侦听其他节点的TaskTracker。
YARN分配JobTracker加快并监控它们的资源,以进步功率。然后将一切来自MapReduce阶段的成果汇总并写入HDFS中的磁盘。
Spark
除了核算在内存中履行并在那里存储直到用户活跃保存它们之外,Spark处理的作业方法与Hadoop相似。开始,Spark从HDFS,S3或其他文件存储中的文件读取到名为SparkContext的已树立机制。除此之外,Spark创立了一个名为RDD或弹性分布式数据集的结构,它表明一组可并行操作的元素的不可变调集。
跟着RDD和相关操作的创立,Spark还创立了一个DAG或有向无环图,以便可视化DAG中的操作次序和操作之间的联系。每个DAG都有阶段和过程;经过这种方法,它与SQL中的解说方案相似。
您能够对RDD履行转化,中心过程,操作或终究过程。给定转化的成果进入DAG,但不会保留到磁盘,但操作的成果会将内存中的一切数据保留到磁盘。
Spark中的一个新笼统是DataFrames,它是在Spark 2.0中作为RDD的配套接口开发的。这两者十分相似,但DataFrames将数据安排成命名列,相似于Python的熊猫或R包。这使得它们比RDD更便利用户,RDD没有相似的一系列列级标题引证。 SparkSQL还答运用户像联系数据存储中的SQL表相同查询DataFrame。
2. 功能
发现Spark在内存中运转速度快100倍,在磁盘上运转速度快10倍。在十分之一的机器上,它也被用于对100 TB数据进行排序,比Hadoop MapReduce快3倍。特别发现Spark在机器学习运用中更快,例如朴素贝叶斯和k-means。
由处理速度衡量的Spark功能现已发现比Hadoop更优,原因如下:
每次运转MapReduce使命的选定部分时,Spark都不会遭到输入输出问题的捆绑。事实证明,运用程序的速度要快得多
Spark的DAG能够在过程之间进行优化。 Hadoop在MapReduce过程之间没有任何周期性衔接,这意味着在该等级不会产生功能调整。
可是,假如Spark与其他同享服务在YARN上运转,则功能可能会下降并导致RAM开支内存走漏。出于这个原因,假如用户有批处理的用例,Hadoop被认为是更高效的体系。
3. 本钱
Spark和Hadoop都能够作为开源Apache项目免费取得,这意味着您能够以零装置本钱运转它。可是,重要的是要考虑整体具有本钱,其间包含保护,硬件和软件购买以及招聘了解群集办理的团队。内部装置的一般经历法则是Hadoop需求更多的磁盘内存,而Spark需求更多的内存,这意味着设置Spark集群可能会愈加贵重。此外,因为Spark是较新的体系,因而它的专家更为稀疏,而且本钱更高。另一种挑选是运用供货商进行装置,例如Cloudera for Hadoop或Spark for DataBricks,或运用AWS在云中运转EMR / Mapreduce流程。
因为Hadoop和Spark是串联运转的,即便在装备为在装置Spark的情况下运转的EMR实例上,也能够将提取定价比较分离出来。关于十分高等级的比较,假定您为Hadoop挑选核算优化的EMR群集,最小实例c4.large的本钱为每小时0.026美元。 Spark最小的内存优化集群每小时本钱为0.067美元。因而,Spark每小时更贵重,但对核算时刻进行优化,相似的使命应该在Spark集群上花费更少的时刻。
4. 安全性
Hadoop具有高度容错性,因为它旨在跨多个节点仿制数据。每个文件都被切割成块,并在许多机器上仿制无数次,以保证假如单台机器停机,能够从别处的其他块重建文件。
Spark的容错首要是经过RDD操作来完成的。开始,静态数据存储在HDFS中,经过Hadoop的体系结构进行容错。跟着RDD的树立,谱系也是如此,它记住了数据集是怎么构建的,而且因为它是不可变的,假如需求能够从头开端重建。跨Spark分区的数据也能够依据DAG跨数据节点重建。数据在履行器节点之间仿制,假如履行器和驱动程序之间的节点或通讯失利,一般可能会损坏数据。
Spark和Hadoop都能够支撑Kerberos身份验证,但Hadoop对HDFS具有愈加细化的安全操控。 Apache Sentry是一个用于履行细粒度元数据拜访的体系,是另一个专门用于HDFS等级安全性的项目。
Spark的安全模型现在很少,但答应经过同享密钥进行身份验证。
5. 机器学习
Hadoop运用Mahout来处理数据。 Mahout包含集群,分类和依据批处理的协作过滤,一切这些都在MapReduce之上运转。现在正在逐渐推出支撑Scala支撑的DSL言语Samsara,答运用户进行内存和代数操作,并答运用户编写自己的算法。
Spark有一个机器学习库MLLib,用于内存迭代机器学习运用程序。它可用于Java,Scala,Python或R,包含分类和回归,以及经过超参数调整构建机器学习管道的才能。
总结
那么它是Hadoop仍是Spark?这些体系是现在市场上处理数据最重要的两个分布式体系。 Hadoop首要用于运用MapReduce典范的大规划磁盘操作,而Spark则是一种更灵敏,但本钱更高的内存处理架构。两者都是Apache的尖端项目,常常一同运用,而且有相似之处,但在决议运用它们时,了解每个项目的特征是十分重要的。