Spark在standalone模式下,默认是使用FIFO的模式,我们可以使用spark.cores.max
来设置它的最大核心数,使用spark.executor.memory 来设置它的内存。
在YARN模式下,使用--num-workers设置worker的数量,使用--worker-memory设置work的内存,使用--worker-cores设置worker的核心数。
下面介绍一下怎么设置Spark的调度为Fair模式。
在实例化SparkContext之前,设置spark.scheduler.mode。
代码语言:javascript复制System.setProperty("spark.scheduler.mode", "FAIR")
公平算法支持把作业提交到调度池里面,然后给每个调度池设置优先级来运行,下面是怎么在程序里面指定调度池。
代码语言:javascript复制context.setLocalProperty("spark.scheduler.pool", "pool1")
上面是设置调度池为pool1,当不需要的时候,可以设置为null。
代码语言:javascript复制context.setLocalProperty("spark.scheduler.pool", null)
默认每个调度池在集群里面是平等共享集群资源的,但是在调度池里面,作业的执行是FIFO的,如果给每个用户设置一个调度池,这样就不会出现迟提交的比先提交的先运行。
下面是设置pool的样本,详情可以具体参考conf/fairscheduler.xml.template。
<?xml version="1.0"?>
<allocations>
<pool name="production">
<schedulingMode>FAIR</schedulingMode>
<weight>1</weight>
<minShare>2</minShare>
</pool>
<pool name="test">
<schedulingMode>FIFO</schedulingMode>
<weight>2</weight>
<minShare>3</minShare>
</pool>
</allocations>
schedulingMode:FAIR或者FIFO。
weight: 权重,默认是1,设置为2的话,就会比其他调度池获得2x多的资源,如果设置为-1000,该调度池一有任务就会马上运行。
minShare: 最小共享核心数,默认是0,在权重相同的情况下,minShare大的,可以获得更多的资源。
我们可以通过spark.scheduler.allocation.file参数来设置这个文件的位置。
代码语言:javascript复制System.setProperty("spark.scheduler.allocation.file", "/path/to/file")