Spark 和 MR 的区别: 多进程与多线程模型
精选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 的区别: 多进程与多线程模型相关推荐
- Spark与MR的区别
速度 spark把运算的中间数据存放在内存,迭代计算效率更高:MR的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘IO操作,影响性能 容错性 spark容错性高,它通过弹性分布式数据集RDD来实现 ...
- 大数据---spark和mr的区别
首先最核心的两点:内存和磁盘的区别:job中途失败重新计算的区别. ---spark最核心的概念是RDD(弹性分布式数据集),它的所有rdd在并行运算过程程中,可以做到数据共享,也就是可以重复使用mr ...
- 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
看到知乎上有个关于linux多进程.多线程的讨论:http://www.zhihu.com/question/19903801/answer/14842584 自己项目里也对这个问题有过很多探讨和测试 ...
- 以 dpdk应用层包处理程序为例谈谈多进程和多线程模型选择
原文链接:http://www.aiuxian.com/article/p-1637690.html 看到知乎上有个关于linux多进程.多线程的讨论:链接地址 自己项目里也对这个问题有过很多探讨和测 ...
- 多进程和多线程的区别_关于多进程和多线程的那些事儿
1. 引言 只有真正写过操作系统内核的人,比如大神Linus才能真正理解进程和线程的区别与联系,像我们学过操作系统课程的人都知道进程和线程的基本概念,但是仅仅是懂个皮毛而已.所以我也是纸上谈兵,根据理 ...
- 多进程与多线程的区别,和用途
一.多进程多线程区别 多进程和多线程的区别,到底啥是多进程,啥是线程 在一个进程中也就是一个应用程序,有多个任务,线程,分别处理不同的任务,比如:这边处理ui,显示菜单图形界面,那边处理算法,计算结果 ...
- 多进程及多线程的区别
一.两者区别 多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成.多进程的数据是分开的.共享复杂,需要用IPC:但同步简单.多线程共享进程数据,共享简单:但同步复杂. ( ...
- 多进程和多线程的区别
多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催) ...
- 多进程与多线程的区别 - jihite
多进程与多线程的区别 - jihite 时间 2014-03-16 10:16:00 博客园-所有随笔区 原文 http://www.cnblogs.com/kaituorensheng/p/360 ...
最新文章
- Java黑皮书课后题第10章:*10.22(实现String类)Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString1)
- [JavaWeb-HTML]HTML标签_文件标签
- 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
- .NET Framework学习笔记(十)
- iOS OC语言: Block底层实现原理
- QT+OpenCV综合示例:载入、读取图片
- vue动态发布到线上_Vue 2.6 发布了
- 龙芯rtc时间关机重启后不能保存问题分析
- Neurons and the brains
- 基于深度强化学习的路径规划笔记
- Dxgi中关于DXGI_MAPPED_RECT中Pitch与Width差异
- 营销自动化权威指南_任务自动化指南
- 201943 ovf 文件的导出和导入
- Natbib 参考文献样式
- 嵌入式调试神器-虚拟示波器之JScope
- 操作系统介绍(按发展顺序)人工操作方式、单道批处理系统、多道批处理系统、分时系统、实时系统、微机操作系统
- 动态规划问题(凑硬币)理解总结
- 若依微服务框架ruoyi-cloud使用手册(持续更新中)
- 趣店季报图解:营收环比降14% 大白汽车收入近6亿
- seo推广优化的方法
热门文章
- sequence——强行推式子+组合意义
- LFTP : 一个功能强大的命令行FTP程序
- IOS 文本文字下面添加下划线
- javacript中的mvc设计模式
- 在网上搜到的有用的资料
- 包学习(一款安卓端小学到高中全部课程精讲APP)
- 2020年12月最新OneDrive网盘免费领取5TB教程
- 2020webpack的面试题(webpack)
- sqlplus / as sysdba 提示权限不足(ORA-01031)问题处理
- debian 9.4 安装教程 linux系统debian9.4图文详细安装步骤