精选30+云产品,助力企业轻松上云!>>>

先说结论:Hadoop MapReduce采用了多进程模型,而Spark采用了多线程模型

接下来,来一起分析,这两种模式的区别以及优缺点:

Apache Spark的高性能一定程度上取决于它采用的异步并发模型(这里指server/driver 端采用的模型),这与Hadoop 2.X(包括YARN和MapReduce)是一致的。

Hadoop 2.X自己实现了类似Actor的异步并发模型,实现方式是epoll+状态机,而Apache Spark则直接采用了开源软件Akka,该软件实现了Actor模型,性能非常高。

尽管二者在 server 端采用了一致的并发模型,但在任务级别(特指 Spark任务和MapReduce任务)上却采用了不同的并行机制:Hadoop MapReduce采用了多进程模型,而Spark采用了多线程模型。

注意,本文的多进程和多线程,指的是同一个节点上多个任务的运行模式。无论是MapReduce和Spark,整体上看,都是多进程:MapReduce应用程序是由多个独立的Task进程组成的;Spark应用程序的 运行环境是由多个独立的Executor进程构建的临时资源池构成的。

多进程模型便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间,不适合运行低延迟类型的作业,这是MapReduce广为诟病的原因之一。而多线程模型则相反,该模型使得Spark很适合运行低延迟类型的作业。总之,Spark同节点上的任务以多线程的方式运行在一个JVM进程中,可带来以下好处:

1)任务启动速度快,与之相反的是MapReduce Task进程的慢启动速度,通常需要1s左右;

2)同节点上所有任务运行在一个进程中,有利于共享内存。这非常适合内存密集型任务,尤其对于那些需要加载大量词典的应用程序,可大大节省内存。

3) 同节点上所有任务可运行在一个JVM进程(Executor)中,且Executor所占资源可连续被多批任务使用,不会在运行部分任务后释放掉,这避免了每个任务重复申请资源带来的时间开销,对于任务数目非常多的应用,可大大降低运行时间。与之对比的是MapReduce中的Task:每个Task单独申请资源,用完后马上释放,不能被其他任务重用,但是可以通过设置 mapred.job.reuse.jvm.num.tasks = 大于 0 的值,来开启 JVM 重用。(开启 JVM 重用:这个功能的缺点是,开启JVM重用将一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡的”job中有某几个reduce task执行的时间要比其他Reduce task消耗的时间多的多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放)

尽管Spark的过线程模型带来了很多好处,但同样存在不足,主要有:

1)由于同节点上所有任务运行在一个进程中,因此,会出现严重的资源争用,难以细粒度控制每个任务占用资源。与之相 反的是MapReduce,它允许用户单独为Map Task和Reduce Task设置不同的资源,进而细粒度控制任务占用资源量,有利于大作业的正常平稳运行。

(完)


专注大数据技术、架构、实战

关注我,带你不同角度看数据架构

本文分享自微信公众号 - 大数据每日哔哔(bb-bigdata)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Spark 和 MR 的区别: 多进程与多线程模型相关推荐

  1. Spark与MR的区别

    速度 spark把运算的中间数据存放在内存,迭代计算效率更高:MR的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘IO操作,影响性能 容错性 spark容错性高,它通过弹性分布式数据集RDD来实现 ...

  2. 大数据---spark和mr的区别

    首先最核心的两点:内存和磁盘的区别:job中途失败重新计算的区别. ---spark最核心的概念是RDD(弹性分布式数据集),它的所有rdd在并行运算过程程中,可以做到数据共享,也就是可以重复使用mr ...

  3. 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑

    看到知乎上有个关于linux多进程.多线程的讨论:http://www.zhihu.com/question/19903801/answer/14842584 自己项目里也对这个问题有过很多探讨和测试 ...

  4. 以 dpdk应用层包处理程序为例谈谈多进程和多线程模型选择

    原文链接:http://www.aiuxian.com/article/p-1637690.html 看到知乎上有个关于linux多进程.多线程的讨论:链接地址 自己项目里也对这个问题有过很多探讨和测 ...

  5. 多进程和多线程的区别_关于多进程和多线程的那些事儿

    1. 引言 只有真正写过操作系统内核的人,比如大神Linus才能真正理解进程和线程的区别与联系,像我们学过操作系统课程的人都知道进程和线程的基本概念,但是仅仅是懂个皮毛而已.所以我也是纸上谈兵,根据理 ...

  6. 多进程与多线程的区别,和用途

    一.多进程多线程区别 多进程和多线程的区别,到底啥是多进程,啥是线程 在一个进程中也就是一个应用程序,有多个任务,线程,分别处理不同的任务,比如:这边处理ui,显示菜单图形界面,那边处理算法,计算结果 ...

  7. 多进程及多线程的区别

    一.两者区别 多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成.多进程的数据是分开的.共享复杂,需要用IPC:但同步简单.多线程共享进程数据,共享简单:但同步复杂. ( ...

  8. 多进程和多线程的区别

    多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催) ...

  9. 多进程与多线程的区别 - jihite

    多进程与多线程的区别 - jihite 时间 2014-03-16 10:16:00 博客园-所有随笔区 原文  http://www.cnblogs.com/kaituorensheng/p/360 ...

最新文章

  1. C#的显式接口和隐式接口
  2. Spring Cloud Alibaba - 20 Nacos StandAlone模式下的数据存储(Derby)及新增登录用户
  3. 303. 区域和检索 - 数组不可变
  4. Django Web开发基础环境配置流程
  5. zstack 第一个例子
  6. Full_of_Boys训练4总结
  7. postgresql9.5 run 文件linux安装后配置成开机服务
  8. linux servlet 乱码问题,Servlet一次乱码排查后的总结
  9. Android学习之动态调用碎片
  10. C++的ORM 开源框架
  11. javascript 原型链实现继承简单例子
  12. ActivityGroup的简单用法
  13. 基于JAVA《Python程序设计》教辅系统计算机毕业设计源码+系统+lw文档+部署
  14. 最新多功能工具箱小程序源码+功能超级多
  15. elasticsearch对analyzed字段无法使用term方法的解决办法
  16. java-net-php-python-springboot学校在线作业考试系统计算机毕业设计程序
  17. 那些优美的英文句子一
  18. AutoCAD使用技巧集锦
  19. 高级密码学复习2-HUST版
  20. 使用opencv的viz模块显示3d点云

热门文章

  1. 监控SRE的黄金信号
  2. python3 collections数据类型模块
  3. centsos7修改主机名 [root@st152 ~]# cat /etc/hostname
  4. vsftp 虚拟用户测试
  5. 如何从程序员转型为项目经理
  6. Socket编程:之TCP案例
  7. win8 任务栏不合并隐藏标题
  8. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
  9. vSphere ESXi 5.5网络问题两例及解决方法
  10. POJ 1163 The Triangle