Spark作業排程
阿新 • • 發佈:2022-04-29
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")