深度:Hadoop对Spark五大维度正面比拼!

每一年,市场上都会出现种种不一样的数据管理规模、类型与速度表现的分布式系统。在这些系统中,Spark和hadoop是得到最大关注的两个。然而该怎么判断哪一款适合你?算法

若是想批处理流量数据,并将其导入HDFS或使用Spark Streaming是否合理?若是想要进行机器学习和预测建模,Mahout或MLLib会更好地知足您的需求吗?编程


 

为了增长混淆,Spark和Hadoop常常与位于HDFS,Hadoop文件系统中的Spark处理数据一块儿工做。可是,它们都是独立个体,每个体都有本身的优势和缺点以及特定的商业案例。安全

本文将从如下几个角度对Spark和Hadoop进行对比:体系结构,性能,成本,安全性和机器学习。架构

3 数据仓库的特色机器学习

什么是Hadoop?编程语言

Hadoop在2006年开始成为雅虎项目,随后成为顶级的Apache开源项目。它是一种通用的分布式处理形式,具备多个组件:分布式

HDFS(分布式文件系统),它将文件以Hadoop本机格式存储,并在集群中并行化;oop

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的顶级项目,常常一块儿使用,而且有类似之处,但在决定使用它们时,了解每一个项目的特征是很是重要的。

                    扫描下方二维码关注咱们,获取更多精彩内容 ~ ~

相关文章
相关标签/搜索