这个问题在这里已经有答案了:
为什么spark比hadoop map reduce快(2个答案)三年前关门了。我听说spark比hadoop有优势,因为spark是内存计算。然而,一个明显的问题是不是所有的数据都能放入一台计算机的内存中。因此,spark仅限于较小的数据集。同时,还有Spark团的概念。因此,我并没有关注spark相对于hadoop的所谓优势。谢谢
nwlls2ji1#
Spark 从不局限于更小的 dataset 也不总是关于 in-memory 计算。 Spark 有很好的数字更高 APIS . Spark 可以在中处理 GB 也。在我的实时经验中,我使用spark来处理流应用程序,我们通常在其中获取数据 GB/Hour 基本的。我们用了 Spark 在 Telecommunication 处理更大的 dataset 也。检查rdd持久性如何适应更大的需求 datasets .
Spark
dataset
in-memory
APIS
GB
GB/Hour
Telecommunication
datasets
14ifxucb2#
激发hadoop的优势。由于跨阶段的spark任务可以在相同的executor节点上执行,因此可以为多个任务节省生成executor的时间。即使您有巨大的内存,mapreduce也无法利用在内存中缓存数据和在后续步骤中使用内存中的数据。另一方面,spark可以缓存数据,前提是它有巨大的jvm可用。跨阶段使用内存数据。在spark中,任务作为同一执行器上的线程运行,使任务内存占用变轻。在mapreduce中,reduce任务的Map是进程而不是线程。spark使用高效的序列化格式在磁盘上存储数据。请遵循此步骤了解详细信息http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/
dluptydi3#
在实际问题中,我们不能仅仅通过一个mapreduce程序来解决,因为它有一个mapper类和一个reducer类,我们主要需要构建一个管道。管道将由多个阶段组成,每个阶段都有mapreduce程序,一个阶段的输出将被一次或多次馈送到后续阶段。这是一个痛苦,因为它涉及大量的io。在mapreduce的情况下,有这些map和reduce任务,之后有一个同步障碍,需要将数据保存到磁盘。mapreduce框架的这个特性是为了在出现故障时可以恢复作业而开发的,但是它的缺点是没有最大限度地利用hadoop集群的内存。当你的管道中有一个迭代算法时,情况会变得更糟。每次迭代都会导致大量磁盘io。因此为了解决这个问题,spark引入了一种新的数据结构rdd。一种ds,它可以保存诸如如何从磁盘读取数据以及计算什么等信息。spark还提供了通过转换RDD创建管道(dag)的简单编程范例。你得到的是一系列rdd,它知道如何得到数据和计算什么。最后,当调用一个动作时,spark framework内部优化管道,将可以一起执行的部分组合在一起(Map阶段),并从逻辑管道创建最终优化的执行计划。然后执行它。它还为用户提供了选择要缓存的数据的灵活性。因此,spark能够实现比mapreduce快近10到100倍的批处理速度。
ddhy6vgd4#
hadoopmapreduce长期以来一直是hadoop批处理作业的主流。然而,出现了两种非常有前途的技术,apache drill是一种用于自助数据探索的低密度sql引擎,apache spark是一种通用计算引擎,它允许您使用相同的统一框架在集群上运行批处理、交互式和流式作业。让我们再深入了解一下spark。要理解spark,你必须真正理解三大概念。首先是rdds,即具有弹性的分布式数据集。这实际上是以对象格式进入系统的数据的表示,允许您在上面进行计算。RDD是有弹性的,因为他们有很长的血统。每当系统出现故障时,他们都可以使用沿袭的先验信息重新计算自己。第二个概念是变换。转换是您对RDD所做的事情,以获得其他具有弹性的RDD。转换的例子可以是打开一个文件并创建一个rdd,或者执行诸如printer之类的功能,然后创建其他弹性rdd。第三个也是最后一个概念是行动。这些都是你实际需要系统提供给你的答案的地方,例如,计算或者问一个关于第一行中有Spark的是什么的问题。spark的有趣之处在于它实现了延迟提升,这意味着这些rdd不会像在系统遇到rdd时那样被加载和推入系统,而是只有在实际需要执行操作时才被加载和推入系统。RDD带来的一个问题是,当我们回到它们是有弹性的,并且在主内存中时,它们与分布式共享内存体系结构以及我们过去所熟悉的大多数体系结构相比如何?有一些不同之处。让我们用一种简短的方式来讨论一下。首先,RDD中的写操作是spark的核心。它们发生在rdd层面。分发服务器共享内存中的写入通常是细粒度的。读取和分发共享内存也是细粒度的。rdd中的写入可以是细粒度的,也可以是粗粒度的。第二件事是恢复。如果系统中有一个部件,我们如何恢复它?由于rdd在出现问题时会构建这个沿袭图,因此它们可以返回并基于该图重新计算并重新生成rdd。谱系在RDD中用于恢复的功能非常强大。在分发共享内存中,我们通常返回到每隔一段时间执行的检查点或任何其他语义检查点机制。在RDD中,一致性相对较小,因为它下面的数据被假定为不可变的。然而,如果数据在变化,那么一致性将是一个问题。分发服务器共享内存不会对可变性做出任何假设,因此,将一致性语义留给应用程序来处理。最后让我们看看spark的好处:spark使用血统提供完全恢复。spark在进行计算时进行了优化,并使用目录循环图对计算进行了优化。非常简单的编程范例,使用RDD上的转换和操作,以及对机器学习、图形和最新Dataframe的现成丰富的库支持。这时一个问题出现了。如果spark真的很棒,spark真的会取代hadoop吗?答案显然是否定的,因为spark为您提供了一个应用程序框架来编写大数据应用程序。但是,它仍然需要在存储系统或无sql系统上运行。
4条答案
按热度按时间nwlls2ji1#
Spark
从不局限于更小的dataset
也不总是关于in-memory
计算。Spark
有很好的数字更高APIS
.Spark
可以在中处理GB
也。在我的实时经验中,我使用spark来处理流应用程序,我们通常在其中获取数据GB/Hour
基本的。我们用了Spark
在Telecommunication
处理更大的dataset
也。检查rdd持久性如何适应更大的需求datasets
.14ifxucb2#
激发hadoop的优势。
由于跨阶段的spark任务可以在相同的executor节点上执行,因此可以为多个任务节省生成executor的时间。
即使您有巨大的内存,mapreduce也无法利用在内存中缓存数据和在后续步骤中使用内存中的数据。
另一方面,spark可以缓存数据,前提是它有巨大的jvm可用。跨阶段使用内存数据。
在spark中,任务作为同一执行器上的线程运行,使任务内存占用变轻。
在mapreduce中,reduce任务的Map是进程而不是线程。
spark使用高效的序列化格式在磁盘上存储数据。
请遵循此步骤了解详细信息http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/
dluptydi3#
在实际问题中,我们不能仅仅通过一个mapreduce程序来解决,因为它有一个mapper类和一个reducer类,我们主要需要构建一个管道。管道将由多个阶段组成,每个阶段都有mapreduce程序,一个阶段的输出将被一次或多次馈送到后续阶段。这是一个痛苦,因为它涉及大量的io。
在mapreduce的情况下,有这些map和reduce任务,之后有一个同步障碍,需要将数据保存到磁盘。mapreduce框架的这个特性是为了在出现故障时可以恢复作业而开发的,但是它的缺点是没有最大限度地利用hadoop集群的内存。当你的管道中有一个迭代算法时,情况会变得更糟。每次迭代都会导致大量磁盘io。
因此为了解决这个问题,spark引入了一种新的数据结构rdd。一种ds,它可以保存诸如如何从磁盘读取数据以及计算什么等信息。spark还提供了通过转换RDD创建管道(dag)的简单编程范例。你得到的是一系列rdd,它知道如何得到数据和计算什么。
最后,当调用一个动作时,spark framework内部优化管道,将可以一起执行的部分组合在一起(Map阶段),并从逻辑管道创建最终优化的执行计划。然后执行它。它还为用户提供了选择要缓存的数据的灵活性。因此,spark能够实现比mapreduce快近10到100倍的批处理速度。
ddhy6vgd4#
hadoopmapreduce长期以来一直是hadoop批处理作业的主流。然而,出现了两种非常有前途的技术,apache drill是一种用于自助数据探索的低密度sql引擎,apache spark是一种通用计算引擎,它允许您使用相同的统一框架在集群上运行批处理、交互式和流式作业。让我们再深入了解一下spark。
要理解spark,你必须真正理解三大概念。
首先是rdds,即具有弹性的分布式数据集。这实际上是以对象格式进入系统的数据的表示,允许您在上面进行计算。RDD是有弹性的,因为他们有很长的血统。每当系统出现故障时,他们都可以使用沿袭的先验信息重新计算自己。
第二个概念是变换。转换是您对RDD所做的事情,以获得其他具有弹性的RDD。转换的例子可以是打开一个文件并创建一个rdd,或者执行诸如printer之类的功能,然后创建其他弹性rdd。
第三个也是最后一个概念是行动。这些都是你实际需要系统提供给你的答案的地方,例如,计算或者问一个关于第一行中有Spark的是什么的问题。spark的有趣之处在于它实现了延迟提升,这意味着这些rdd不会像在系统遇到rdd时那样被加载和推入系统,而是只有在实际需要执行操作时才被加载和推入系统。
RDD带来的一个问题是,当我们回到它们是有弹性的,并且在主内存中时,它们与分布式共享内存体系结构以及我们过去所熟悉的大多数体系结构相比如何?有一些不同之处。让我们用一种简短的方式来讨论一下。首先,RDD中的写操作是spark的核心。它们发生在rdd层面。分发服务器共享内存中的写入通常是细粒度的。读取和分发共享内存也是细粒度的。rdd中的写入可以是细粒度的,也可以是粗粒度的。
第二件事是恢复。如果系统中有一个部件,我们如何恢复它?由于rdd在出现问题时会构建这个沿袭图,因此它们可以返回并基于该图重新计算并重新生成rdd。谱系在RDD中用于恢复的功能非常强大。在分发共享内存中,我们通常返回到每隔一段时间执行的检查点或任何其他语义检查点机制。在RDD中,一致性相对较小,因为它下面的数据被假定为不可变的。然而,如果数据在变化,那么一致性将是一个问题。分发服务器共享内存不会对可变性做出任何假设,因此,将一致性语义留给应用程序来处理。
最后让我们看看spark的好处:
spark使用血统提供完全恢复。
spark在进行计算时进行了优化,并使用目录循环图对计算进行了优化。
非常简单的编程范例,使用RDD上的转换和操作,以及对机器学习、图形和最新Dataframe的现成丰富的库支持。
这时一个问题出现了。如果spark真的很棒,spark真的会取代hadoop吗?答案显然是否定的,因为spark为您提供了一个应用程序框架来编写大数据应用程序。但是,它仍然需要在存储系统或无sql系统上运行。