资源调度框架
宽窄依赖关系
RDD之间的宽窄依赖关系,只要看父RDD和子RDD之间的关系:
1.窄依赖:
父RD与子RDD之间是一对一的关系。子RDD有多个父RDD,也称为窄依赖,这样是依赖是窄依赖,窄依赖不会产生shuffle(节点之间数据的传输称为shuffle)。
*每个应用程序都有独立的excutors:不会存在共用的情况。一个job和action对应**
每组的任务被称为一个stage。stage是由并行的他上课组成
关于stage
1.每个partition中放的是逻辑,是一条数据进行处理的,处理完一条,接着处理下一条,最后一个stage处理完,任务才会落地
2.stage是由多条并行的tast组成的。
3. 如果2个task放在一个节点上,判断是否为并行处理,看配置的时候,分配的excutor分配的核数,如果是一个核,就不是并行处理了。如果是多个核,就是并行处理。
4. stage中的并行度,是由partition决定的,并且由最终的RDD的partition数决定的。
5. 管道中的数据,遇到shuffle或者持久化的时候会落地。
6.提高并行度的方法: 具有shuffle的功能的算子,都可以传入参数定义分区数,reduceByKey,join,distinct.
spark和map-reduce的根本区别:
spark可以将数据持久化的内存在,下次使用的时候,可以直接在内存中读取,而map-reduce每次使用数据的时候都需要从磁盘中读取。spark在迭代场景中使用的效果最好。如果没有运用在迭代的场景中,几乎没有什么区别
处理模式:
管道处理的模式:f3(f2(f1(textFile)) )
任务调度
DAGScheduler是一个高级的任务调度器:创建任务的时候就会自动创建。会划分stage,每个stage由多个并行的task组成,把task提交给TaskScheduler,
TaskScheduler是一个低级的任务调度器,和DAGScheduler同时创建。 它的主要任务是把task任务发送到worker中的worker节点去执行。
如果任务失败了,TaskSchedule会重新尝试3次。
如果任务失败了,DAGScheduler会尝试重新发送4次,
推测执行机制,由ETL的时候,一定要关闭推测执行机制,默认关闭。
资源调度和任务调度图
1-6:资源调度
7-11:任务调度
##############################################
spark资源调度是粗粒度的方式,
application在启动之前,会把资源申请完毕,如果申请不到,一直处于等待状态,一直到资源申请到位置,必须一次申请完毕后,才会执行任务,task执行任务的时候,task不需要申请资源,task的执行效率会加快。必须最后一个task执行完的时候,才会释放资源。
优点:执行速度快
缺点:容易造成资源浪费:
细粒度资源申请:MR
aoolication执行之前,不会将所有的task申请完毕,task执行时,task自己申请资源,释放资源,这样task执行的相对较慢,但时资源可以做到充分的利用。
优点:集群资源可以充分利用
缺点:application执行相对较慢。