三種排程器
FIFO排程器
先進先出,但不適合資源公平性
容量排程器
獨立的專門佇列保證小作業也可以提交後就啟動,佇列容量是專門保留的
以整個叢集的利用率為代價,與FIFO比,大作業執行的時間要長
公平排程器
不需要預留資源,排程器可以在執行的作業之間動態平衡資源,大作業啟動時,因為是唯一執行的,所以獲得叢集的所有資源,之後小作業啟動時,被分配到叢集的一半的資源,這樣每個作業都能公平共享資源
排程器配置
1) 多個組織共享叢集,每個組織配置一個佇列,一個佇列分配一定的叢集資源
2) 同一個佇列可以進一步劃分,同一個組織不同使用者共享佇列所分配的資源,使用FIFO排程
3) 佇列資源不足時,可以等待其他佇列釋放的資源或者使用叢集中其他空閒資源,這可能會使得實際使用的佇列容量超出配置的容量,這叫做“彈性佇列”
4) 為佇列設定一個最大容量限制,可以防止佇列過多侵佔其他佇列資源
容量排程器配置
在capacity-scheduler.xml配置yarn.scheduler.capacity.<queue-path>.<sub-property>
作業的佇列放置
job放置的佇列取決於job本身,可以在mapreduce中配置mapreduce.job.queuename,如果佇列不存在,則報錯,不指定則使用預設default佇列
佇列名是指佇列層次的最後一層,不包含之前路徑
既實現了使用者佇列間的公平排程,也實現了佇列內作業間的公平排程
假設使用者A,B各自擁有佇列Q1,Q2
1) A先啟動一個job J1,則J1佔用叢集所有資源
2) B啟動一個job J2,則Q1中的J1需要分一半資源給Q2中的J2
3) B又啟動一個job J3,則Q2中的J2需要分一半資源給Q2中的J3
公平排程器配置
1) 因為yarn-site.xml中預設使用容量排程器(CDH除外),首先修改其中yarn.resourcemanager.scheduler.class為公平排程器:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
2) 可以修改佇列內的排程策略,預設使用公平排程,也支援FIFO
job的佇列放置
1) 使用基於規則的系統確定job佇列放置,匹配對應的使用者佇列直到使用default佇列
2) 直接就使用default,所有job公平分配
搶佔
允許排程器終止佔用資源超過公平共享份額佇列的容器,這些容器資源釋放後被分配給資源數量低於應得份額的佇列
搶佔的影響:因為被終止的容器需要重新執行而降低叢集效率
搶佔超時設定
yarn.scheduler.fair.preemption
設定超時引數,設定時間都是秒級別
1) 最小共享搶佔
defaultMinSharePreemptionTimeout
指定時間未獲得被承諾的最小共享資源,排程器則搶佔其他容器
2) 公平共享搶佔
defaultFairSharePreemptionTimeout
指定時間獲得資源低於公平共享份額的一半,排程器搶佔其他容器。
三種排程器
FIFO排程器
先進先出,但不適合資源公平性
容量排程器
獨立的專門佇列保證小作業也可以提交後就啟動,佇列容量是專門保留的
以整個叢集的利用率為代價,與FIFO比,大作業執行的時間要長
公平排程器
不需要預留資源,排程器可以在執行的作業之間動態平衡資源,大作業啟動時,因為是唯一執行的,所以獲得叢集的所有資源,之後小作業啟動時,被分配到叢集的一半的資源,這樣每個作業都能公平共享資源
排程器配置
容量排程器
1) 多個組織共享叢集,每個組織配置一個佇列,一個佇列分配一定的叢集資源
2) 同一個佇列可以進一步劃分,同一個組織不同使用者共享佇列所分配的資源,使用FIFO排程
3) 佇列資源不足時,可以等待其他佇列釋放的資源或者使用叢集中其他空閒資源,這可能會使得實際使用的佇列容量超出配置的容量,這叫做“彈性佇列”
4) 為佇列設定一個最大容量限制,可以防止佇列過多侵佔其他佇列資源
容量排程器配置
在capacity-scheduler.xml配置yarn.scheduler.capacity.<queue-path>.<sub-property>
作業的佇列放置
job放置的佇列取決於job本身,可以在mapreduce中配置mapreduce.job.queuename,如果佇列不存在,則報錯,不指定則使用預設default佇列
佇列名是指佇列層次的最後一層,不包含之前路徑
公平排程器
既實現了使用者佇列間的公平排程,也實現了佇列內作業間的公平排程
假設使用者A,B各自擁有佇列Q1,Q2
1) A先啟動一個job J1,則J1佔用叢集所有資源
2) B啟動一個job J2,則Q1中的J1需要分一半資源給Q2中的J2
3) B又啟動一個job J3,則Q2中的J2需要分一半資源給Q2中的J3
公平排程器配置
1) 因為yarn-site.xml中預設使用容量排程器(CDH除外),首先修改其中yarn.resourcemanager.scheduler.class為公平排程器:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
2) 可以修改佇列內的排程策略,預設使用公平排程,也支援FIFO
job的佇列放置
1) 使用基於規則的系統確定job佇列放置,匹配對應的使用者佇列直到使用default佇列
2) 直接就使用default,所有job公平分配
搶佔
允許排程器終止佔用資源超過公平共享份額佇列的容器,這些容器資源釋放後被分配給資源數量低於應得份額的佇列
搶佔的影響:因為被終止的容器需要重新執行而降低叢集效率
搶佔超時設定
yarn.scheduler.fair.preemption
設定超時引數,設定時間都是秒級別
1) 最小共享搶佔
defaultMinSharePreemptionTimeout
指定時間未獲得被承諾的最小共享資源,排程器則搶佔其他容器
2) 公平共享搶佔
defaultFairSharePreemptionTimeout
指定時間獲得資源低於公平共享份額的一半,排程器搶佔其他容器。