spark和 mapreduce的比较
网上查阅一些资料,收集整理如下:
1、 通用性
spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块、图计算GraphX等等;mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。
2、 内存利用和磁盘开销
MapReduce的设计:中间结果需要写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据,,可以提高可靠性,减少内存占用,但是牺牲了性能。
Spark默认把结果写到内存, Spark的DAGScheduler相当于一个改进版的MapReduce,如果计算不涉及与其他节点进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘IO的操作。(但是,如果计算过程中涉及数据交换,Spark也是会把shuffle的数据写磁盘的!!!),还有一方面就是对shuffle操作的优化,spark提供Cache机制来支持需要反复迭代计算或者多次数据共享,减少中间文件的生成,减少数据读取的IO开销。另外DAG相比MapReduce在大多数情况下可以减少shuffle次数。
3、 任务调度
mapreduce任务调度和启动开销大;
spark线程池模型减少task启动开销
4、 排序
Spark 避免不必要的排序操作,由于mapreduce会对数据进行排序,所以reduce操作必须等到文件全部生成并进行排序之后才可以进行。spark不是这种自动排序,因此可以生成一点,刷新ShuffleMapTask缓冲区到文件中,然后直接进行reduce。
Hadoop MapReduce是sort-based,进入combine()和reduce()的records必须先sort,这样的好处在于combine/reduce()可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper对每段数据先做排序, reducer的shuffle对排好序的每段数据做归并) 。目前的Spark默认选择的是hash-based,通常使用 HashMap来对shuffle来的数据进行aggregate,不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似sortByKey()的操作。
5、 迭代
mapreduce不适合迭代计算(如机器学习、图计算等),交互式处理(数据挖掘) 和流式处理(点击日志分析), 其中间结果需要落地,需要保存到磁盘,这样必然会有磁盘io操做,影响性能。
spark把运算的中间数据存放在内存,迭代计算效率更高,更适合做需要反复迭代的计算
mapreduce一个job里,只有一对M与R,而spark的一个job里可以有多个M多个R。mapreduce需要好多个job来完成的spark一个job就完成了,而且spark的除了shuffle算子需要落盘,其他的都不需要,省去了io开销。
6、 错误恢复机制
Spark的错误恢复机制在很多场景会比MR的错误恢复机制的代价低,这也是性能提升的一个点。
spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;mapreduce的话容错可能只能重新计算了,成本较高。
另外spark提供cache机制,当步骤1-10中第10步计算失败,假如第九步进行了缓存,那么就可以不需要重新计算直接取缓存了。
7、 复杂性
spark框架和生态更为复杂,首先有RDD、血缘lineage(保存了RDD的依赖关系)、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同业务场景的需要进行调优已达到性能要求;
mapreduce框架及其生态相对较为简单,对性能的要求也相对较弱,但是运行较为稳定,适合长期后台运行。
总结,spark生态更为丰富,功能更为强大、性能更佳,适用范围更广;mapreduce更简单、稳定性好、适合离线海量数据挖掘计算。
spark和 mapreduce的比较的更多相关文章
- Alluxio增强Spark和MapReduce存储能力
Alluxio的前身为Tachyon.Alluxio是一个基于内存的分布式文件系统:Alluxio以内存为中心设计,他处在诸如Amazon S3. Apache HDFS 或 OpenStack Sw ...
- Spark 颠覆 MapReduce 保持的排序记录
在过去几年,Apache Spark的採用以惊人的速度添加着,通常被作为MapReduce后继,能够支撑数千节点规模的集群部署. 在内存中数 据处理上,Apache Spark比MapReduce更加 ...
- 详解MapReduce(Spark和MapReduce对比铺垫篇)
本来笔者是不打算写MapReduce的,但是考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spark和MapReduce的对比做铺垫,笔 ...
- 重要 | Spark和MapReduce的对比,不仅仅是计算模型?
[前言:笔者将分上下篇文章进行阐述Spark和MapReduce的对比,首篇侧重于"宏观"上的对比,更多的是笔者总结的针对"相对于MapReduce我们为什么选择Spar ...
- Spark 与 MapReduce的区别
学习参考自 http://spark-internals.books.yourtion.com/markdown/4-shuffleDetails.html 1. Shuffle read 边 fe ...
- spark VS mapreduce
Apache Spark,一个内存数据处理的框架,现在是一个顶级Apache项目. 这是Spark迈向稳定的重要一步,因为它越来越多地在下一代大数据应用中取代MapReduce. MapReduce是 ...
- spark与mapreduce的区别
spark是通过借鉴Hadoop mapreduce发展而来,继承了其分布式并行计算的优点,并改进了mapreduce明显的缺陷,具体表现在以下几方面: 1.spark把中间计算结果存放在内存中,减少 ...
- Spark之MapReduce原理
参考http://www.cnblogs.com/wuyudong/p/mapreduce-principle.html MapReduce 我们来拆开看: Mapping(映射)对集合里的每个目 ...
- spark和mapreduce的区别
spark和mapreduced 的区别map的时候处理的时候要落地磁盘 每一步都会落地磁盘 reduced端去拉去的话 基于磁盘的迭代spark是直接再内存中进行处理 dag 执行引擎是一个job的 ...
随机推荐
- https协议分析
一:什么是HTTPS https全称是超文本传输安全协议,https利用SSL/TLS加密数据包来进行http通信.https开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性. ...
- C++ Web框架::cintara
1.Cinatra是由C++开源社区purecpp发起的一个开源项目,是一个现代C++写的Web框架,旨在给用户提供一个易用.灵活和高性能的Web框架,让用户能完全专注于核心逻辑而无需关注http细节 ...
- vue内使用echarts
18年下班年用的vue + echarts,现在才想起来总结,着实不敬业 线上的项目叫股往(http://rich.xchol.com/#/) 好了,进入正题: 首先,需要新建一个vue的项目,在vu ...
- Smali语言基础语法
1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...
- 现在Java 桌面应用程序能做到什么程度(Spring Boot+JavaFX2开发)
Spring Boot - JavaFX 2.0应用 很多人对Java开发native程序第一反应还停留在暗灰色单一风格的Java GUI界面,开发方式还停留在AWT或者Swing.本文主要基于Spr ...
- java中JVM内存管理(1)
Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗? 可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC算法 以及年轻代和老年代各自特点 ...
- Vultr新用户充值送50刀
充值送50刀 活动还是可以的,充个10刀,适合用来当测试服,按时间计费
- 【原】iOS开发进阶(唐巧)读书笔记(二)
第三部分:iOS开发底层原理 1.Objective-C对象模型 1.1 isa指针 NSObject.h部分代码: NS_ROOT_CLASS @interface NSObject <NSO ...
- epoll(2) 源码分析
epoll(2) 源码分析 文本内核代码取自 5.0.18 版本,和上一篇文章中的版本不同是因为另一个电脑出了问题,但是总体差异不大. 引子留下的问题 关键数据结构 提供的系统调用 就绪事件相关逻辑 ...
- Swagger解决你手写API接口文档的痛
首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛 苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...