Spark与Hadoop MapReduce的性能优势

时间:2017-03-12 06:23:02

标签: hadoop apache-spark

我听说Spark由于火花的内存计算而优于hadoop。然而,一个明显的问题是并非所有数据都可以放入一台计算机内存中。因此,Spark仅限于较小的数据集。与此同时,还有火花星团的概念。因此,我没有遵循火花优于hadoop MR的所谓优势。

由于

4 个答案:

答案 0 :(得分:3)

Hadoop MapReduce长期以来一直是Hadoop批处理作业的中流砥柱。然而,出现了两种非常有前景的技术Apache Drill,它是一种用于自助数据探索的低密度SQL引擎和Apache Spark,它是一种允许您运行批处理的通用计算引擎群集上的交互式和流式传输作业使用相同的统一帧。让我们再深入了解Spark。

要了解Spark,您必须了解三大概念。

  1. 首先是 RDDs ,即弹性分布式数据集。这实际上是以对象格式进入系统的数据的表示,并允许您在其上进行计算。 RDD具有弹性,因为它们具有很长的谱系。只要系统出现故障,他们就可以使用先前的信息重新计算自己。
  2. 第二个概念是转换。转换是您对RDD执行其他弹性RDD所做的操作。转换的例子包括打开文件和创建RDD,或者执行打印机之类的功能,然后创建其他弹性RDD。
  3. 第三个也是最后一个概念是行动。这些事情会在您实际要求系统需要为您提供答案的地方执行,例如,计算或询问有关Spark中第一行的内容的问题。 Spark的有趣之处在于它具有延迟高度,这意味着这些RDD不会像系统遇到RDD时那样被加载并推入系统,但只有在实际执行操作时才会执行。
  4. RDD提出的一件事是,当我们回到他们身上时,他们是弹性的,并且在主内存中,他们如何与分布式共享内存架构和我们过去熟悉的大部分内容进行比较?有一些差异。让我们以简短的方式与他们一起去。首先,RDD中的写入是Spark的核心。它们发生在RDD级别。分发器共享内存中的写入通常是细粒度的。读取和分配器共享内存也是细粒度的。用RDD写的可以是精细的或者是粗粒度的。

    第二部分是恢复。如果系统中有一个部分会发生什么,我们如何恢复它?由于RDD会在出现问题时构建此谱系图,因此可以根据该图返回并重新计算并重新生成RDD。 Lineage在RDD中非常强烈地用于恢复。在分发者共享的记忆中,我们通常会回到间隔完成的检查指示或任何其他语义检查指向机制。 RDD中的一致性相对微不足道,因为它下面的数据被认为是不可变的。但是,如果数据发生变化,那么一致性将成为问题。分发器共享内存不会对可变性做出任何假设,因此会将一致性语义留给应用程序来处理。

    最后让我们看一下Spark的好处:

    • Spark使用血统提供完全恢复。
    • Spark在进行计算时进行了优化,并使用目录循环图最佳地进行计算。
    • 使用RDD上的转换和操作非常简单的编程范例,以及对机器学习,图形和最近数据帧的现成丰富的库支持。

    此时出现了一个问题。如果Spark非常棒,那么Spark实际上会取代Hadoop吗?答案显然是否定的,因为Spark为您编写大数据应用程序提供了一个应用程序框架。但是,它仍然需要在存储系统或无SQL系统上运行。

答案 1 :(得分:2)

Spark永远不会局限于较小的dataset,而且并非总是in-memory计算。 Spark的数字更高APISSpark也可以处理GB。在我的实时经验中,我使用Spark来处理流应用程序,我们通常在GB/Hour基本获取数据。我们在Spark中使用了Telecommunication来处理更大的dataset。请检查RDD Persistence如何容纳更大的datasets

答案 2 :(得分:2)

在真实世界问题的情况下,我们无法通过一个具有Mapper类和reducer类的MapReduce程序来解决它们,我们主要需要构建一个管道。管道将由多个阶段组成,每个阶段都有MapReduce程序,并且一个阶段的输出将被馈送到后续阶段一次或多次。这是一个痛苦,因为它涉及的IO数量。

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

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

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

答案 3 :(得分:2)

Spark优于hadoop。

  1. 由于可以在相同的执行程序节点上执行跨阶段的spark任务,因此可以为多个任务保存生成Executor的时间。
  2. 即使您拥有巨大的内存,MapReduce也无法在内存中缓存数据以及在后续步骤中使用内存数据。
  3. 另一方面,Spark可以缓存数据,如果有大量JVM可用的话。跨阶段使用内存数据。
  4. 在Spark任务中作为同一执行程序上的线程运行,使任务内存占用空间变亮。
  5. 在MapReduce中,reduce Task的Map是进程而不是线程。
  6. Spark使用高效的序列化格式在磁盘上存储数据。
  7. 请按照此处详细了解http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/