Spark资源调度

相关术语

       Workers:HashSet[WorkerInfo]集合,用于储存worker地址信息及资源信息

       WaitingDriver:ArrayBuffer[]集合,在用户以Cluster方式提交应用时用于保存将要启动的Driver信息,添加后调用Schedule方法在Worker中启动Driver,以Cilent方式提交应用时WaitingDriver中无数据

       WaitingApps:ArrayBuffer[]集合,在AM或Driver任务调度器为Task向RM申请资源时,将会在WaitingApps中添加应用数据,添加后也调用Schedule方法后将在Worker中创建Executor用来执行Task

注意:Workers为什么要使用HashSet?
       使用HashSet可以避免重复,如果当一个Worker挂掉了,且集群的心跳间隔时间较长,在这段时间内该Worker重启后会继续向RM心跳反馈,如果不是HashSet类型,这时在Workers集合中就会有两个该Worker节点的信息。

注意:WaitingDriver和WaitingApps为什么要使用ArrayBuffer?
       方便集合信息的修改与删除,提高效率。

提交流程图

以Client方式提交

以Cluster方式提交

资源调度特点

       1)每一个Application默认只会启动一个Executor,这个Executor默认使用1GB的内存和当前Worker节点上管理的所有的Core核

       2)可以指定在一个Worker上启动多少个Executor,需要在提交Application时指定Executor使用的核心数
       例如spark-submit -master …… --executor-cores 2 ……
则如果一个Worker节点有10个Core核心,2GB内存,就会启动10/2=5个Executor

       3)在启动Executor时默认是以轮训的方式来启动的,轮训方式:在每个Worker中依次单独创建一个Executor,直到Worker上的资源不够或者到达限制

附加问题

计算启动Executor数量

       一个集群共有5个Worker,每个Worker节点管理10个Core核心、10GB内存

       1)spark-submit -master …… --executor-cores 2 --executor-memory 2 ……

       解答:通过语句得知一个Executor需要使用2个Core和2GB内存,所以每个Worker上可以启动5个Executor,5个Worker就一共有25个Executor

       2)spark-submit -master …… --executor-cores 3 --executor-memory 4 ……

       解答:通过语句得知一个Executor需要使用3个Core和4GB内存,所以每个Worker上可以启动Min(10/3,10/4)=2个Executor,5个Worker就一共有10个Executor

       3)spark-submit -master …… --executor-cores 2 --executor-memory 2 --total-executor-cores 10……

       解答:经过1)的计算该次本该启动25个Executor,但是–total-executor-cores的意思是整个Application中最多可以使用多少个Core,所以25个Executor=50个Core大大超过限制,所以共有10/2=5个Executor

所以我们有如下公式可以计算整个Application启动Executor的数量:Min [ Min(单个Worker管理Core数/Executor使用Core数,单个Worker管理内存数/Executor使用内存数)X Worker总数,限制总Core核心数/ Executor使用Core数]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值