Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark相对于Hadoop MapReduce的性能优势_Hadoop_Apache Spark - Fatal编程技术网

Spark相对于Hadoop MapReduce的性能优势

Spark相对于Hadoop MapReduce的性能优势,hadoop,apache-spark,Hadoop,Apache Spark,我听说Spark比hadoop有优势,因为Spark的内存计算。然而,一个明显的问题是,并非所有的数据都能放入一台计算机的内存中。因此,Spark仅限于较小的数据集。同时,还有火花团的概念。因此,我并没有关注spark相对于hadoop的所谓优势 感谢Hadoop MapReduce长期以来一直是Hadoop批处理作业的主流。但是,出现了两种非常有前途的技术,一种是用于自助数据探索的低密度SQL引擎,另一种是通用计算引擎,允许您使用相同的统一框架在集群上运行批处理、交互式和流式作业。让我们再深入

我听说Spark比hadoop有优势,因为Spark的内存计算。然而,一个明显的问题是,并非所有的数据都能放入一台计算机的内存中。因此,Spark仅限于较小的数据集。同时,还有火花团的概念。因此,我并没有关注spark相对于hadoop的所谓优势


感谢

Hadoop MapReduce长期以来一直是Hadoop批处理作业的主流。但是,出现了两种非常有前途的技术,一种是用于自助数据探索的低密度SQL引擎,另一种是通用计算引擎,允许您使用相同的统一框架在集群上运行批处理、交互式和流式作业。让我们再深入了解一下Spark

要理解Spark,你必须真正理解三大概念

首先是RDDs,即弹性分布式数据集。这实际上是以对象格式进入系统的数据的表示,允许您在其上进行计算。RDD是有弹性的,因为它们有很长的血统。无论何时系统出现故障,他们都可以使用沿袭的先验信息重新计算自己。 第二个概念是转换。转换就是您对RDD所做的,以获得其他弹性RDD。转换的例子可能是打开一个文件并创建一个RDD,或者执行诸如打印机之类的功能,然后创建其他弹性RDD。 第三个也是最后一个概念是行动。这些都是你实际需要系统提供给你的答案的地方,例如,计算或者问一个关于第一行中有火花的是什么的问题。Spark的有趣之处在于,它实现了延迟提升,这意味着这些RDD不会像在系统遇到RDD时那样加载并推入系统中,而是只有在实际需要执行操作时才会加载和推入。 RDD带来的一个问题是,当我们回到它们是有弹性的,并且在主内存中时,它们与分布式共享内存体系结构以及我们过去所熟悉的大多数体系结构相比如何?有一些不同之处。让我们以一种小而简单的方式和他们一起去。首先,RDD中的写操作是Spark的核心。它们发生在RDD级别。分发服务器共享内存中的写入通常是细粒度的。读取和分发共享内存也是细粒度的。RDD中的写入可以是细粒度的,也可以是细粒度的

第二件事是恢复。如果系统中存在部件,会发生什么情况?我们如何恢复它?由于RDD在出现问题时会构建此沿袭图,因此它们可以返回并基于该图重新计算并重新生成RDD。沿袭在RDD中被非常广泛地用于恢复。在分发共享内存中,我们通常会返回到每隔一段时间执行的检查点或任何其他语义检查点机制。在RDD中,一致性相对来说是微不足道的,因为它下面的数据被认为是不可变的。但是,如果数据在变化,那么一致性将是一个问题。分发服务器共享内存不会对可变性做出任何假设,因此,将一致性语义留给应用程序处理

最后,让我们看看Spark的好处:

Spark使用血统提供完全恢复。 Spark在使用目录循环图进行计算和优化计算时进行了优化。 使用RDD上的转换和操作以及对机器学习、图形和最新数据帧的现成丰富库支持的非常简单的编程范例。
这时出现了一个问题。如果Spark如此强大,Spark真的会取代Hadoop吗?答案显然是否定的,因为Spark为您编写大数据应用程序提供了一个应用程序框架。但是,它仍然需要在存储系统或无SQL系统上运行。

Spark从不局限于较小的数据集,也不总是在内存计算中运行。Spark有很多高级API。Spark也可以处理GB中的数据。在我的实时体验中,我使用Spark处理流媒体应用程序,我们通常以GB/Hour basic获取数据。我们在电信领域也使用了Spark来处理更大的数据集。检查一下如何适应更大的数据集。

如果现实世界中出现问题,我们不能仅仅通过一个MapReduce程序来解决它们,它有一个Mapper类和一个reducer类,我们主要需要构建一个管道。管道将由多个阶段组成,每个阶段都有MapReduce程序,一个阶段的输出将被馈送到一个或多个后续阶段。这是一种痛苦,因为它涉及到大量的IO

在使用MapReduce的情况下,这些Map和Reduce任务后面会有一个同步障碍 需要将数据保存到光盘中。MapReduce框架的这一特性是为了在出现故障时可以恢复作业而开发的,但其缺点是,它没有最大限度地利用Hadoop集群的内存。当你的管道中有一个迭代算法时,情况会变得更糟。每次迭代都会导致大量磁盘IO

因此,为了解决这个问题,Spark引入了一种新的数据结构RDD。一种DS,可以保存诸如如何从磁盘读取数据以及计算内容等信息。Spark还提供了通过转换RDD创建pipelineDAG的简单编程范例。你得到的是一系列的RDD,它知道如何获取数据和计算什么


最后,当调用某个操作时,Spark framework会在内部优化管道,将可以一起执行的部分分组映射阶段,并从逻辑管道创建最终优化的执行计划。然后执行它。它还为用户提供了选择要缓存的数据用户的灵活性。因此,spark能够实现比MapReduce快近10到100倍的批处理速度。

与hadoop相比,spark具有优势

由于跨阶段的spark任务可以在相同的执行器节点上执行,因此可以为多个任务节省生成执行器的时间。 即使您拥有巨大的内存,MapReduce也无法利用在内存中缓存数据和在后续步骤中使用内存中数据的优势。 另一方面,Spark可以缓存数据,只要有巨大的JVM可用。跨阶段使用内存数据。 在Spark中,任务作为同一执行器上的线程运行,使任务内存占用变轻。 在MapReduce中,reduce任务的映射是进程而不是线程。 Spark使用高效的序列化格式在磁盘上存储数据。 请遵循此步骤了解详细信息