MapReduce 与 Spark 用于大数据分析之比较

本文章参考与吴信东,嵇圣硙.MapReduce 与 Spark 用于大数据分析之比较[J].软件学报,2018,29(6):1770-1791.

MapReduce

主要思想:将大规模数据处理作业拆分成多个可独立运行的Map任务,分布到多个处理机上运行,产生一定量的中间结果,再通过Reduce任务混合合并产生最终的输出文件。

框架

不足之处

MapReduce

首先,为了保证较好的可扩展性,MapReduce的任务之间相互独立,互不打扰。所造成的结果便是大量的中间结果需要通过网络进行传输,占用了网络资源,并且为了保证容错,所有的中间结果都要存储到磁盘中,效率不高同时,在MapReduce中只有等待所有任务结束后,Reduce任务才能进行计算,异步行差,导致资源利用率低

Spark

核心抽象概念就是弹性分布式数据集RDDD(resilient distributed datasets),该抽象是分布在集群上的只读型可恢复数据集,用户可以利用Spark中的转换(transformation)和动作(action)对其进行操作,也可以长期保存在内存中不被回收,这样使用这部分内容时,不需要再次创建此RDD。这也是Spark在迭代问题中的性能表现要高于MapReduce的原因。

什么是RDD?

弹性分布式数据集(resilient distributed datasets,简称RDD)

RDD 是一种分布在集群中的只读型对象集合,Spark 将创建 RDD 的一系列转换记录下来,如果 RDD 的某个分区或者部分数据丢失,可以根据其父辈 RDD 重建来进行容错,这种策略称为血统(lineage).

名称

优点

RDD

(1)RDD 只能从外部存储转换(transformation)操作产生,相比于分布式共享内存(DSM),可以更高效地实现容错 , 对于丢失数据 , 只需根据血统就可重新计算出来 , 而不需要设置特定的检查点。(2)RDD 的只读不变性可以实现类 MapReduce 的预测式执行。(3)RDD 基于数据的本地性的任务划分调度策略提高了系统性能。(4)RDD 是可序列化的,当内存不足时,可自动RDD 存储于磁盘上

MapReduce与Spark的比较

框架

优缺点

MapReduce与Spark的比较

(1)凭借自身的任务调度策略和shuffle机制,在中间数据传输数量以及文件数目方面的性能要优于Spark,而在处理迭代问题和一些低延迟问题时,Spark 可以根据数据之间的依赖关系对任务进行更合理的划分,相较于 MapReduce,有效地减少了中间数据传输数量与同步次数,提高了系统的运行效率。(2)**运行时间:Spark比MapReduce快。**Spark 是轻量级的、基于内存计算的开源的集群计算平台,在默认情况下,Spark 中的数据都会基于内存进行存储;而 MapReduce 每一步 Map 或 Reduce 操作的结果都需要存入磁盘.所以相对而言,在一般情形中,基于内存存储的 Spark 运行速度较快。(3)**资源消耗:MapReduce低于Spark。**当解决同一问题时,MapReduce 在内存、网络以及磁盘的占用率上都要低于 Spark.更低的资源消耗不仅可以降低系统对硬件的要求,也保证 MapReduce 可以在同一集群中与其他应用协作计算互不干扰。(4)**容错性能:MapReduce比Spark好。**在 MapReduce 中,每一步操作的结果都会被存入磁盘,虽然需要大量的磁盘 I/O 操作,但是在计算出现错误时可以很好地从磁盘进行恢复;而 Spark 所有计算都基于内存存储,因为内存中的数据会不定期进行清理,所以当某一步计算出现数据丢失时,Spark 需要根据 RDD 中的信息进行数据的重新计算,会耗费一定的资源。