1. 程式人生 > 其它 >Spark作業排程

Spark作業排程

  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。

System.setProperty("spark.scheduler.mode", "FAIR")

  公平演算法支援把作業提交到排程池裡面,然後給每個排程池設定優先順序來執行,下面是怎麼在程式裡面指定排程池。

context.setLocalProperty("spark.scheduler.pool", "pool1")

  上面是設定排程池為pool1,當不需要的時候,可以設定為null。

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引數來設定這個檔案的位置。

System.setProperty("spark.scheduler.allocation.file", "/path/to/file")