精选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. Java黑皮书课后题第10章:*10.22(实现String类)Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString1)
  2. [JavaWeb-HTML]HTML标签_文件标签
  3. 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
  4. .NET Framework学习笔记(十)
  5. iOS OC语言: Block底层实现原理
  6. QT+OpenCV综合示例:载入、读取图片
  7. vue动态发布到线上_Vue 2.6 发布了
  8. 龙芯rtc时间关机重启后不能保存问题分析
  9. Neurons and the brains
  10. 基于深度强化学习的路径规划笔记
  11. Dxgi中关于DXGI_MAPPED_RECT中Pitch与Width差异
  12. 营销自动化权威指南_任务自动化指南
  13. 201943 ovf 文件的导出和导入
  14. Natbib 参考文献样式
  15. 嵌入式调试神器-虚拟示波器之JScope
  16. 操作系统介绍(按发展顺序)人工操作方式、单道批处理系统、多道批处理系统、分时系统、实时系统、微机操作系统
  17. 动态规划问题(凑硬币)理解总结
  18. 若依微服务框架ruoyi-cloud使用手册(持续更新中)
  19. 趣店季报图解:营收环比降14% 大白汽车收入近6亿
  20. seo推广优化的方法

热门文章

  1. sequence——强行推式子+组合意义
  2. LFTP : 一个功能强大的命令行FTP程序
  3. IOS 文本文字下面添加下划线
  4. javacript中的mvc设计模式
  5. 在网上搜到的有用的资料
  6. 包学习(一款安卓端小学到高中全部课程精讲APP)
  7. 2020年12月最新OneDrive网盘免费领取5TB教程
  8. 2020webpack的面试题(webpack)
  9. sqlplus / as sysdba 提示权限不足(ORA-01031)问题处理
  10. debian 9.4 安装教程 linux系统debian9.4图文详细安装步骤