Spark 和 MapReduce 的对比

        在此之前,我们先来了解一下 MapReduce 。MapReduce 本质就是两个过程:Map切分 和 reduce聚合。

一、内存计算

        spark 将数据存储在内存中进行计算;MapReduce 将数据存储在磁盘上。

        由于内存访问速度更快,spark 在处理迭代计算和交互式查询等工作负载时通常比 MapReduce 更高效。

Spark 基于内存的计算:

        Spark中我们有一种优化策略:移动计算、不移动数据。旨在减少数据传输的开销,提高计算效率。其核心思想是将计算任务尽可能的放在数据所在的节点上执行,而不是将数据传输到计算节点。具体来说,包括下面两个方面:

1. 数据本地性:

        Spark 会尽量将计算任务分配到存储有数据的节点上,以利用数据的本地性。这样可以减少数据传输的开销。通过在数据所在节点上执行计算任务,可以避免将数据传输到其他节点,从而提高计算性能。

2. 任务调度:

        Spark 不会移动实际的数据。数据仍然保留在存储节点上,只有计算任务被分发到存储数据的节点上执行。

MapReduce基于磁盘的计算:

1. 数据读取:

        输入数据从磁盘读取到内存中进行处理。也就是说,每次需要处理数据时,都需要从磁盘读取相应的数据块到内存中进行计算操作。

2. 中间结果存储:

        MapReduce 框架会将 Map 和 Reduce 阶段的中间结果存储在磁盘上。在 Map 阶段,将 Map 任务的输出写入磁盘中的临时文件。在 Reduce 阶段,Reduce 任务会从磁盘上读取中间结果,并根据键值对进行合并和排序。

3. 数据持久性:

        将数据存储在持久化的磁盘介质上,及时在节点故障或计算过程中断的情况下,数据也能够持久保存。这样可以确保数据的可靠性和容错性。

二、执行速度

        Spark 的内存计算特性 和 基于DAG有向无环图 的执行模型,通常比 MapReduce 更快。Spark可以在内存中保留数据和计算结果,并通过多个任务合并为更少的阶段来减少磁盘的读写开销。

三、API 和编程模型

        Spark提供了丰富的API,包括 scala、Java、Python等。开发起来更加灵活、表达能力更强。而 MapReduce 使用 Java 编程语言来编写 Map 和 Reduce 函数,需要手动编写更多的代码来实现处理逻辑。

四、扩展性

        Spark 有更好的扩展性,可以方便的与其他数据处理框架和工具集成。如:Spark Streaming用于流处理、Spark SQL 用于查询和结构化数据处理、Spark MLlib用于机器学习等。

五、容错性

        Spark提供了弹性式分布数据集RDD,具有自动容错和数据恢复机制。能够在节点故障时重新计算丢失的数据。

        MapReduce 需要在每个任务的开始和结束时将数据写入磁盘,因此在故障情况下需要重新启动整个计算。

什么是容错性?

        容错性是指系统在面对故障、错误或者异常情况时能够保持正常运行,并能够从故障中恢复或继续进行操作的能力。数据在处理中,由于数据规模庞大、且分布在多个计算节点上,节点故障可能导致任务中断或数据丢失。

spark实现容错性的方式?

1、弹性是分布数据集RDD

        RDD 是 Spark 的核心抽象,代表分布在集群中的 不可变、可分区、可并行处理 的数据集。RDD 具有容错性是因为它会在计算过程中记录转换操作的 有向无环图DAG,从而可以在节点故障时重新计算丢失的数据。

2、DAG调度器和任务重试

        Spark 的任务调度器能够根据DAG图的依赖关系调度任务执行。如果某个节点上的任务失败或者超时,调度器会自动重新调度该任务,并尝试在其他可用节点上重新执行。这样可以保证任务的继续进行,并从故障中恢复。

3、容错数据结构

        累加器(Accumulator):累加器是一种支持在并行计算中进行聚合操作的变量。它可以在节点故障和重新执行时正确地保留状态。

        广播变量(Broadcast Variable):广播变量是一种高效地在集群中广播大型只读数据集的方式。它能够避免 数据重复传输冗余存储,并在节点故障时重新传输。

4、数据复制和副本

        在计算过程中,Spark 可以将数据的副本存储在不同的节点上,以防止节点故障导致数据丢失。这样,在故障发生时,可以从其他副本中恢复数据并继续处理。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值