Spark资源调度

一、资源调度

1、Spark集群启动成功,Woker与Master通信,此时Worker的各种信息(IP、port等)会存在Master中的wokers集合中,其数据类型是HashSet(val workes = new HashSet[WorkerInfo] () :workerInfo封装得是每一个work的资源信息,每一个worker的IP和端口),集群成功启动后,Master会为各个Worker分配资源,client会启动一个sparksubmit进程

2、当sparksubmit向Master为Driver申请资源时,申请信息会封装在Master
中的waitingDrivers集合中,此时有个Schedule()方法会监控waitingDrivers集合是否为空,若不为空,说明有客户端向Master申请资源,然后查看当前集群的资源情况,从而找到符合要求的节点启动Driver,待Driver启动成功,就把这个申请信息从waitingDrivers集合中删除。

3、Driver启动成功后,Driver会向Master为Application申请资源,申请信息会封装在Master中的waitingApps集合中,同样Schedule()方法会监控waitingApps集合是否为空,若不为空,说明有Driver为当前Application申请资源,然后查看当前集群的资源情况,从而找到符合要求的节点去启动Executor进程,待Executor启动成功后,就把这个申请信息从waitingApps集合中删除。
资源调度
总结:
当为Driver或者当前Application申请资源时,会直接调用Schedule()方法,根据不同的申请去反调相应的方法,即一个Schedule()方法中有两套处理逻辑。

二、资源调度结论:

1、默认情况下,每一个Worker会为当前的Application启动一个Executor进程,并且这个Executor会使用1G内存和当前Worker所能管理的所有core。
2、如果想要在一个Worker上启动多个Executor,可以在提交Application的时候,指定Executor使用的core数,命令为:spark -submit --executor-cores。
3、默认情况下Executor的启动方式为轮训启动。

三、问题思考

1、Executor在worker上启动的条件是什么?
Worker分配给Executor的cores大于Executor所需要的最小cores。
Worker空闲 cores大于Executor所需最小cores。
Worker的空闲内存大于Executor所需要的内存。

2、假设集群有5个work,每个worker节点管理10G内存,10个core
1)、spark-submit --master …–executor-cores 2 --executor-memory 2G …在集群中会启动多少个Executor进程? 25
2)、spark-submit --master …–executor-cores 3 --executor-memory 4G 集群中会启动多少个Executor进程? 10
3)、spark-submit --master --executor-cores2 --executor-memory 6G --total-executor-cores(整个Application最多使用的core数) 10 集群会启动多少个executor? 5
4)、启动Executor个数的公式?
–executor-cores ec
–executor-memory em
–total-executtor-cores tec
worker num wn
wrker core wc
min(min(wm/em,wc/ec)×wn,tec/ec)
至此资源调度就写完啦~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值