spark作业调度原理

概述

         spark有多种方式调度各个计算所需的资源.

         首先,每个application(即sparkContext实例)有一组独立的Executor进程。各种cluster manager(yarn Resource manager,standalone master等等)为application间的调度提供自己的方式。

         其次,一个application内的各个job(spark action实例)也可能并行执行,前提是各个job是在独立的线程中提交。这种情况在处理网络请求的场景下是正常的,如shark。spark提供了fairscheduler来调度application内的job。

 

调度application

         每个spark application有一组专有的executor jvm,这组jvm只用来跑这个application的任务,以及只存储这个application的数据。如果是多用户共享集群,不同的cluster manager,会有不同的资源分配(或调度)方式:

standalone模式:默认情况下,提交到集群的application以FIFO方式调度,每个被调度的application会使用所有的集群资源。你可以配置spark.cores.max来控制application的资源使用量;若未设置spark.core.max,也可以通过spark.deploy.defaultCores设置默认值。除了控制core的使用,也可以通过spark.executor.memory指定每个executor的内存使用量。

Mesos:在memos模式下,通过spark.mesos.coarse=true的配置可以启用静态分区(static partition)功能。同standalone模式一样,也可以通过spark.cores.max和spark.executor.memory分别配置core和内存的使用量。

yarn:在yarn模式下,--num-executors控制application使用的executor的数量,--executor-memory 和 --executor-cores分别控制core和内存使用。

 

         对于memos,还可以实现CPU核心动态共享(dynamic sharing of CPU cores)。这种模式下,每个application同样具有固定和独立的内存,只是在计算空闲时,可以把core分配给其他application使用。这种模式在具有大量不是很活跃的application的情况下很有用。此模式的一个缺点是:当一个application需要重新获得属于自己的核心时,可能由于借用core的application正在计算而需要等待,造成不可预测的延迟。开启这种模式,只需要使用memos://URL以及spark.mesos.coarse设置为false(默认值就是false)。

请注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值