Spark 和 Hadoop比较
我们将比较两个大数据框架在不同参数上的优势和劣势。
但是,无论我们进行比较的结果如何,我们都应该知道Spark和Hadoop都是大数据类类的关键组成部分。
Apache Spark与Hadoop:Hadoop简介
Hadoop是一个框架,允许我们首先在分布式环境中存储大数据,以便我们可以并行处理它。
Hadoop中基本上有两个组件:
HDFS
HDFS创建资源的抽象,让我为我们简化它。
与虚拟化类似,我们可以在逻辑上将HDFS视为用于存储大数据的单个单元,但是实际上我们是在分布式方式下跨多个节点存储数据。
其中我们具有主从结构。
在HDFS中,名称节点是主节点,数据节点是从节点。
命名节点
它是维护和管理DataNode(从节点)的主守护程序。
它记录了存储在群集中的所有文件的元数据,例如存储的块的位置,文件的大小,权限,层次结构等。
它记录了文件系统元数据发生的每一次更改。
例如,如果在HDFS中删除了文件,则NameNode会立即将其记录在EditLog中。
它定期从群集中的所有DataNode接收心跳信号和阻止报告,以确保DataNode处于活动状态。
它记录了HDFS中的所有块以及这些块存储在哪些节点中。
数据节点
这些是在每个从属计算机上运行的从属守护程序。
实际数据存储在DataNodes上。
他们负责处理来自客户端的读写请求。
它们还负责根据NameNode的决定创建块,删除块并复制它们。
纱
YARN通过分配资源和安排任务来执行所有处理活动。
它有两个主要的守护程序,例如:ResourceManager和NodeManager。
资源管理器
它是一个群集级别的组件(每个群集一个),在主计算机上运行。
它管理资源并计划在YARN上运行的应用程序。
节点管理器
它是节点级别的组件(每个节点一个),并在每个从属计算机上运行。
它负责管理容器并监视每个容器中的资源利用率。
它还跟踪节点的运行状况和日志管理。
它与ResourceManager持续通信以保持最新状态。
因此,我们可以使用MapReduce在HDFS上执行并行处理。
要了解有关Hadoop的更多信息,可以浏览此Hadoop教程教程 。
现在,我们已经准备好了Hadoop简介,让我们继续进行Spark简介。
Apache Spark与Hadoop:Apache Spark简介
Apache Spark是用于分布式计算环境中的实时数据分析的框架。
它执行内存中计算以提高数据处理速度。
利用内存计算和其他优化,处理大规模数据的速度更快。
因此,它需要高处理能力。
弹性分布式数据集(RDD)是Spark的基本数据结构。
它是对象的不可变分布式集合。
RDD中的每个数据集都划分为逻辑分区,可以在群集的不同节点上进行计算。
RDD可以包含任何类型的Python,Java或者Scala对象,包括用户定义的类。
Spark组件使其快速而可靠。
Apache Spark具有以下组件:
Spark Core Spark Core是大规模并行和分布式数据处理的基本引擎。此外,在核心之上构建的其他库允许进行流式处理,SQL和机器学习的各种工作负载。它负责内存管理和故障恢复,调度,分配和监视群集上的作业以及与存储系统进行交互
Spark Streaming Spark Streaming是Spark的组件,用于处理实时流数据。因此,它是对核心Spark API的有用补充。它支持实时数据流的高吞吐量和容错流处理
Spark SQL:Spark SQL是Spark中的新模块,它将关系处理与Spark的函数编程API集成在一起。它支持通过SQL或者Hive查询语言查询数据。对于熟悉RDBMS的人来说,Spark SQL将是我们早期工具的轻松过渡,我们可以其中扩展传统关系数据处理的范围。
GraphX:GraphX是用于图形和图形并行计算的Spark API。因此,它使用弹性分布式属性图扩展了Spark RDD。在较高的层次上,GraphX通过引入弹性分布式属性图(Resilient Distributed Property Graph)来扩展Spark RDD抽象:一个有向多重图,每个顶点和边都具有属性。
MLlib(机器学习):MLlib代表机器学习库。 Spark MLlib用于在Apache Spark中执行机器学习。
如我们所见,Spark附带了高级库,包括对R,SQL,Python,Scala,Java等的支持。
这些标准库增加了复杂工作流程中的无缝集成。
除此之外,它还允许各种服务集与其集成,例如MLlib,GraphX,SQL +数据框架,流服务等,以增强其函数。
要了解有关Apache Spark的更多信息,可以浏览此Spark教程教程 。
现在,Apache Spark和Hadoop的一切准备就绪。
让我们继续前进,将Apache Spark和Hadoop在不同参数上进行比较,以了解其优势。
Apache Spark vs Hadoop:要比较的参数
表现
Spark具有内存处理函数,因此速度很快。
它还可以使用磁盘存储不完全适合内存的数据。
Spark的内存处理函数可提供近乎实时的分析。
这使Spark适用于信用卡处理系统,机器学习,安全分析和物联网传感器。
Hadoop最初设置为连续从多个来源收集数据,而不必担心数据类型并将其存储在分布式环境中。
MapReduce使用批处理。
MapReduce从未为实时处理而构建,YARN的主要思想是对分布式数据集进行并行处理。
比较两者的问题在于它们执行处理的方式不同。
使用方便
Spark随附了适用于Scala,Java,Python和Spark SQL的用户友好型API。
Spark SQL与SQL非常相似,因此SQL开发人员可以更轻松地学习它。
Spark还为开发人员提供了一个交互式shell程序,以查询和执行其他操作,并获得即时反馈。
我们可以使用shell或者将其与Sqoop,Flume等多种工具集成,轻松地将数据导入Hadoop。
YARN只是一个处理框架,可以与Hive和Pig的多种工具集成。
HIVE是一个数据仓库组件,它使用类似于SQL的界面在分布式环境中执行读取,写入和管理大型数据集。
我们可以浏览这个Hadoop生态系统教程 ,了解可以与Hadoop集成的各种工具。
费用表
Hadoop和Spark都是Apache开源项目,因此该软件没有成本。
成本仅与基础架构有关。
两种产品的设计方式都使其可以在具有较低TCO的商用硬件上运行。
现在我们可能想知道它们的区别方式。
Hadoop中的存储和处理是基于磁盘的,而Hadoop使用标准数量的内存。
因此,使用Hadoop,我们需要大量的磁盘空间以及更快的磁盘。
Hadoop还需要多个系统来分发磁盘I/O。
由于Apache Spark进行内存处理,因此需要大量内存,但可以处理标准速度和数量的磁盘。
由于磁盘空间是一种相对便宜的商品,并且由于Spark不使用磁盘I/O进行处理,因此它需要大量RAM才能执行内存中的所有内容。
因此,Spark系统产生更多成本。
但是,是的,要记住的一件事是Spark的技术减少了所需系统的数量。
它需要更少的系统,而价格更高。
因此,即使有额外的RAM需求,Spark仍会降低单位计算成本。
数据处理
数据处理有两种类型:批处理和流处理。
批处理与流处理
批处理:批处理对于大数据世界至关重要。
用最简单的术语来说,批处理正在处理一段时间内收集到的大量数据。
在批处理中,首先收集数据,然后在以后的阶段中生成处理结果。
批处理是一种处理大型静态数据集的有效方法。
通常,我们对存档的数据集执行批处理。
例如,计算一个国家的平均收入或者评估过去十年中电子商务的变化。
流处理:流处理是大数据世界中的当前趋势。
每小时需要的是速度和实时信息,这就是蒸汽处理所要做的。
批处理不允许业务对实时变化的业务需求做出快速反应,流处理的需求迅速增长。
现在回到Apache Spark vs Hadoop,YARN基本上是一个批处理框架。
当我们向YARN提交作业时,它会从集群读取数据,执行操作并将结果写回到集群。
然后,它再次读取更新的数据,执行下一个操作并将结果写回到群集中,依此类推。
Spark执行类似的操作,但是它使用内存处理并优化了步骤。
GraphX允许用户查看与图形和集合相同的数据。
用户还可以使用弹性分布式数据集(RDD)转换和联接图形。
容错能力
Hadoop和Spark都提供容错能力,但是两者都有不同的方法。
对于HDFS和YARN而言,主守护程序(即分别为NameNode和ResourceManager)检查从守护程序(即分别为DataNode和NodeManager)的心跳。
如果任何从属守护程序发生故障,则主控守护程序会将所有挂起和正在进行的操作重新计划到另一个从属服务器。
这种方法是有效的,但是它也可以显着增加单次故障操作的完成时间。
Hadoop使用商品硬件时,HDFS确保容错的另一种方法是复制数据。
如上所述,RDD是Apache Spark的构建块。
RDD为Spark提供容错能力。
他们可以引用外部存储系统(例如HDFS,HBase,共享文件系统)中存在的任何数据集。
它们可以并行操作。
RDD可以将数据集持久存储在内存中的各个操作中,从而使将来的操作快10倍。
如果RDD丢失,它将使用原始转换自动重新计算。
这就是Spark提供容错的方式。
安全
Hadoop支持Kerberos进行身份验证,但是很难处理。
但是,它也支持第三方供应商,如LDAP(轻型目录访问协议)进行身份验证。
他们还提供加密。
HDFS支持传统的文件权限以及访问控制列表(ACL)。
Hadoop提供服务级别授权,以确保客户端具有提交作业的正确权限。
Spark当前支持通过共享机密进行身份验证。
Spark可以与HDFS集成,并且可以使用HDFS ACL和文件级权限。
利用Kerberos的函数,Spark也可以在YARN上运行。
Hadoop最适合的用例:
分析存档数据。 YARN允许并行处理大量数据。数据的一部分在不同的DataNode上并行处理,并从每个NodeManager收集结果。
如果不需要即时结果。 Hadoop MapReduce是批处理的一种很好且经济的解决方案。
Spark最适合的用例:
实时大数据分析:
实时数据分析意味着处理由实时事件流生成的数据,这些数据以每秒数百万个事件的速度进入,例如Twitter数据。
Spark的优势在于它能够支持数据流以及分布式处理。
这是一种有用的组合,可提供近乎实时的数据处理。
由于MapReduce旨在对大量数据执行批处理和分布式处理,因此它有一个优点。
实时数据仍可以在MapReduce上进行处理,但其速度远远不能满足Spark的要求。
Spark声称处理数据的速度比MapReduce快100倍,而磁盘快10倍。
图形处理:
大多数图形处理算法(例如页面等级)都对同一数据执行多次迭代,这需要消息传递机制。
我们需要对MapReduce进行显式编程,以处理对同一数据的多次迭代。
大致来说,它是这样工作的:从磁盘读取数据,并在特定的迭代之后,将结果写入HDFS,然后从HDFS读取数据,以进行下一次迭代。
这非常低效,因为它涉及将数据读取和写入磁盘,这涉及大量I/O操作以及跨群集的数据复制以实现容错能力。
而且,每个MapReduce迭代都有很高的延迟,并且下一个迭代只能在上一个作业完全完成之后才能开始。
同样,消息传递需要相邻节点的分数,以便评估特定节点的分数。
这些计算需要来自其邻居的消息(或者跨作业多个阶段的数据),而MapReduce缺乏这种机制。
为了满足对图形处理算法的高效平台的需求,设计了诸如Pregel和GraphLab之类的不同图形处理工具。
这些工具快速且可扩展,但是对于这些复杂的多阶段算法的创建和后处理而言效率不高。
Apache Spark的引入在很大程度上解决了这些问题。
Spark包含一个称为GraphX的图形计算库,可简化我们的生活。
与传统的MapReduce程序相比,内存中的计算以及内置的图形支持将算法的性能提高了1到2度。
Spark使用Netty和Akka的组合在整个执行程序中分发消息。
让我们看一些统计数据,这些统计数据描述了使用Hadoop和Spark的PageRank算法的性能。
迭代机器学习算法:
几乎所有的机器学习算法都是迭代工作的。
如我们先前所见,迭代算法在MapReduce实现中涉及I/O瓶颈。
MapReduce使用的粗粒度任务(任务级并行性)对于迭代算法而言过于繁重。
在Mesos(分布式系统内核)的帮助下,Spark会在每次迭代后缓存中间数据集,并在此缓存的数据集上运行多个迭代,从而减少了I/O,并有助于以容错的方式更快地运行算法。
Spark具有一个称为MLlib的内置可伸缩机器学习库,该库包含高质量算法,该算法利用迭代并产生比有时在MapReduce上使用的一遍近似法更好的结果。
快速的数据处理。众所周知,Spark允许进行内存处理。结果,对于RAM中的数据,Spark的速度提高了100倍,对于存储中的数据,Spark的速度提高了10倍。
迭代处理。 Spark的RDD允许在内存中执行多种映射操作,而无需将临时数据集写入磁盘。
近实时处理。 Spark是提供即时业务洞察力的出色工具。这就是在信用卡的流媒体系统中使用Spark的原因。
" Apache Spark:Apache Hadoop的杀手还是救星?"
答案-Hadoop MapReduce和Apache Spark不会互相竞争。
实际上,它们彼此很好地互补。
Hadoop将庞大的数据集置于商品系统的控制之下。
Spark为需要它的数据集提供实时的内存中处理。
当我们结合使用Apache Spark的能力时,例如:高处理速度,高级分析和对Hadoop在商品硬件上的低成本操作的多重集成支持,它将提供最佳结果。
Hadoop补充了Apache Spark函数。
Spark不能完全取代Hadoop,但好消息是,目前对Spark的需求已达到历史最高水平!