我想你指的Hadoop作业是指Map/Reduce作业。主要的差别有如下3点:
1、MR作业的资源管控是通过yarn进行的,spark可以通过yarn进行资源管控,也可以不使用yarn,但是多个组件合设时(如集群中既有spark计划,又有HBase查询),建议还是使用yarn;
2、spark是基于内存计算的,计算的中间结果存放在内存,可以进行反复迭代计算;而MR计算的中间结果是要落磁盘的,所以一个job会涉及到反复读写磁盘,这也是性能比不上spark的主要原因;
3、MR的一个task就要对应一个container,container的每次启动都要耗费不少时间,有些hadoop版本(如华为OceanInsight Hadoop)实现了容器预热(重用)功能,这个消耗可能会小一些;而spark是基于线程池来实现的,资源的分配会更快一些。
熟悉hadoop的人应该都知道,用户先编写好一个程序,我们称为mapreduce程序,一个mapreduce程序就是一个job,而一个job里面可以有一个或多个task,task又可以区分为map task和reduce task.
而在spark中,也有job概念,但是这里的job和mapreduce中的job不一样,它不是作业的最高级别的粒度,在它只上还有application的概念。我们先来看看spark文档是怎么定义application,task ,job和stage的:
application:user program built on spark. consists of a driver program and executors on the cluster.
task:a unit of work that will be sent to one executor
job:a parallel computation consisting of multiple tasks that gets spawned in response to a spark action (e.g. save, collect); you'll see this term used in the driver's logs.
stage:each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in mapreduce); you'll see this term used in the driver's logs.
一个application和一个sparkcontext相关联,每个application中可以有一个或多个job,可以并行或者串行运行job。spark中的一个action可以触发一个job的运行。在job里面又包含了多个stage,stage是以shuffle进行划分的。在stage中又包含了多个task,多个task构成了task set。
mapreduce中的每个task分别在自己的进程中运行,当该task运行完的时候,该进程也就结束了。和mapreduce不一样的是,spark中多个task可以运行在一个进程里面,而且这个进程的生命周期和application一样,即使没有job在运行。
这个模型有什么好处呢?可以加快spark的运行速度!tasks可以快速地启动,并且处理内存中的数据。但是这个模型有的缺点就是粗粒度的资源管理,每个application拥有固定数量的executor和固定数量的内存。
这些就是他们之间的区别啦。希望帮到您。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....