Free Style】基于華為CCE微服務改造的技術實踐(二)">【Free Style】基于華為CCE微服務改造的技術實踐(二)
1038
2022-05-29
接上篇:
【Free Style】Hadoop-Yarn之Resource Manager源碼分析(三)
https://portal.huaweicloud.com/blogs/45e07b16c07311e7b8317ca23e93a891
4??????算法介紹
Yarn的調度器的作用主要是回答了如何選擇一堆隊列,在隊列上如何選擇一個應用的問題。
Yarn Scheduler支持的調度機制包括:
a)?????????雙層資源調度機制-----核心,Yarn資源分配總體架構
b)????????層級隊列管理機制----對上層資源分配的管理方式;
c)?????????資源保證和資源搶占機制----保證資源需求的機制
目前Yarn支持的調度算法主要有三種,Fifo Scheduler,Capacity Scheduler,Fair Scheduler。
a)?????????FIFO Scheduler:最簡單的調度器,按照先進先出的方式處理應用。只有一個隊列可提交應用,所有用戶提交到這個隊列。
b)????????Capacity Scheduler(Yahoo):可以看作是FifoScheduler的多隊列版本。每個隊列可以限制資源使用量。但是,隊列間的資源分配以使用量作排列依據,使得容量小的隊列有競爭優勢。在同一個隊列中使用FIFO
c)?????????Fair Scheduler(Facebook):多隊列,多用戶共享資源。特有的客戶端創建隊列的特性,使得權限控制不太完美。根據隊列設定的最小共享量或者權重等參數,按比例共享資源。延遲調度機制跟CapacityScheduler的目的類似,但是實現方式稍有不同。
算法對比如下:
調度器
FifoScheduler
CapacityScheduler
FairScheduler
設計目的
最簡單的調度器,易于理解和上手
多用戶的情況下,最大化集群的吞吐和利用率
多用戶的情況下,強調用戶公平地貢獻資源
隊列組織方式
單隊列
樹狀組織隊列。子隊列的資源限制計算是基于父隊列的。
樹狀組織隊列。但是父隊列和子隊列沒有參數繼承關系。父隊列的資源限制對子隊列沒有影響。
資源限制
無
父子隊列之間有容量關系。每個隊列限制了資源使用量,全局最大資源使用量,最大活躍應用數量等。
每個葉子隊列有最小共享量,最大資源量和最大活躍應用數量。用戶有最大活躍應用數量的全局配置。
隊列ACL限制
可以限制應用提交權限
可以限制應用提交權限和隊列開關權限,父子隊列間的ACL會繼承。
可以限制應用提交權限,父子隊列間的ACL會繼承。但是由于支持客戶端動態創建隊列,需要限制默認隊列的應用數量。
隊列排序算法
無
按照隊列的資源使用量最小的優先
根據公平排序算法排序
應用選擇算法
先進先出
先進先出
先進先出或者公平排序算法
本地優先分配
支持
支持
支持
延遲調度
不支持
支持
支持
資源搶占
不支持
支持
支持
4.1??????資源分配模型
Yarn的資源分配模型如下,當NM通過心跳信息告知RM本身所擁有的資源之后,RM中調度器需要選擇一個應用為其分配資源。其基本步驟如下:
1)選擇隊列:Capacity Scheduler優先選擇資源利用率低的隊列;而FairScheduler則依賴于所選擇的具體策略,可以是Fair,FIFO,或者DRF。
2)從隊列中選擇應用:Capacity Scheduler使用FIFO,而Fair Scheduler同樣使用Fair、FiFO,DRF等方式;
3)最后從應用中選擇合適的容器進行分配,主要依賴于容器的優先級以及本地性特征。
Capacity Scheduler
Capacity Scheduler允許多租戶能夠安全共享一個大的集群,在滿足分配容量的限制下,為應用及時分配資源。CapacityScheduler確保共享一個大的集群的每一個組織所需的資源。資源共享的同時,每個組織可以訪問那些不被使用的超額資源。
CapacityScheduler提供一個嚴格的限制集合,確保單個應用/用戶/隊列不能消耗不成比例的資源,同時,CapacityScheduler支持來自單個用戶或者隊列的已初始化/掛起的應用的限制,從而確保集群的公平和穩定。
目前Capacity支持以下特性:
a)?????????Hierarchical Queues:層次化隊列確保資源共享。
b)????????Capacity Guarantees:所有提交到一個queue上的應用可以訪問所有分配給該queue的資源。管理員可以配置軟限制或者可選的硬性要求在這些queue上的資源。
c)?????????Security?:每個queue都有嚴格的ACL用于控制哪些用戶可以提交應用到某個queue上。同時也確保用戶不能看到或者修改其他用戶的引用。支持per-queue管理員角色和系統管理員角色。
d)????????Elasticity?:空閑資源可以超分配給任意的queue,但是如果有一些在容量以下的queue需要資源時,這些資源將會被分配給那些在不足容量的隊列的應用,這樣可以防止集群中有人而已占用資源。
e)?????????Multi-tenancy:全面的限制以防止單個應用、用戶、隊列壟斷整個queue或者集群的資源。
f)?????????Operability:1)Runtime Configuration:queue可以被動態修改(包括定義和屬性,如容量,ACL等),也可以被動態創建,但是不能動態刪除。2)Drain applications:管理員可以停止一個queue,新的應用不能被提交到該queue,但是已經存在的app可以運行到結束為止。管理員也可以重新start一個停止了的queue。
g)????????Resource-based Scheduling:支持資源密集型app,app可以指定比默認情況更高的資源需求。目前支持內存資源。
h)????????Queue Mapping based on User or Group:基于user或者group將一個job映射到一個指定的queue。
Queue(隊列)是CapacityScheduler提供的主要抽象,由管理員創建表示共享集群的價值。CapacityScheduler提供多級別的queue,確保同一個組織的queue優先共享空閑資源,提供同一個組織中應用對于共享資源的親和性。CapacityScheduler有一個預定義的queue,叫做root。系統中所有其他的queue都是root的子queue。子queue不會直接繼承父親的屬性,除非有另外的說明。下圖是queue的配置文件:
Capacity Scheduler的Queue可配置屬性屬性(etc/hadoop/capacity-scheduler.xml):
a)?????????資源分配
i.??????????????Capacity:百分比,同一層的所有queue的綜合等于100.但是queue中應用可以消耗比queue capacity更多的資源(當存在空閑資源時),提供彈性能力。
ii.??????????????Maximum Capacity:限制queue中app的彈性值。
iii.??????????????Minimum-user-limit:每個隊列在任意時刻分配給一個用戶的資源分配比例最低值。通常還有一個默認最大值,是總資源/用戶數。
iv.??????????????User-limit-factor:queue容量的倍數,用于單個用戶獲取更多的資源,通常設置為1。
v.??????????????Maximum-allocation-mb:queue中分配給每個container的最大內存。覆蓋集群中maximum-allocation-mb參數,但是要小于等于該值。
vi.??????????????Maximum-allocation-vcores:queue中分配給每個container的最大virtual core。覆蓋集群中maximum-allocation-vcores參數,但是要小于等于該值。
b)????????運行、掛起進程限制
i.??????????????Maximum-applications/per-queue Maximum-applications:?系統中并發的app最大個數,單個queue上的app個數按照容量的比例進行劃分。也可以對每個queue進行單獨設置,但是要小于或者等于比例劃分的值。
ii.??????????????Maximum-am-resource-percent?/ per-queue Maximum-am-resource-percent:?運行AM的資源最大比例。
c)?????????Queue管理和權限
i.??????????????State:queue的狀態,可以是running或者stopped
ii.??????????????Acl_submit_applications:?控制app提交權限;acl規則如果沒有被特殊指定會從父queue繼承。
iii.??????????????Acl_administer_queue:控制app管理權限。
d)????????Queue映射
i.??????????????Queue-mappings:指定user或者group與特定的queue進行映射。
ii.??????????????Queue-mapping-override.enable:特定user的queue是否可以被覆蓋。
Capacity Scheduler具有的其他屬性:
a)?????????資源計算器
i.??????????????resource-calculator:用于在Scheduler中比較資源。如DefaultResourceCalculate和DominantResourceCalculate,前者只使用內存,后者使用多種條件。
b)????????數據位置
i.??????????????node-locality-delay:在本rack中執行調度允許失敗的次數。
4.3??????Fair Scheduler
Fair Scheduler為每個app平均分配資源,資源的等價共享。Hadoop NextGen能夠基于多種資源類型進行調度,目前,Fair Scheduler的缺省決策基于內存,但是也可以配置基于內存和CPU,使用DRF。Fair Scheduler不像缺省的hadoop調度器,他可以確保短任務在理想時間內執行完成,并且長任務不會餓死。
Fair Scheduler將app組織為queue,然后在queue之間進行公平共享。缺省的,所有用戶共享一個名為default的queue,但是如果app在容器資源請求中指定了隊列,那么該請求將會被提交到對應的queue。另外也可以通過包含在配置請求中的用戶名字分配queue。在每個queue中,調度策略被用于在所有running app之間共享資源。缺省調度策略是基于內存的公平共享,但是也可以配置FIFO以及DRF多資源調度策略。Queue可以被劃分成多個子queue,同時每個queue配置不同的權值。
Fair Scheduler的queue具有以下屬性:
a)?????????Fair Scheduler支持層次化queue,所有的queue都從“root”queue劃分出來。
b)????????所有的可用資源在root queue的所有子queue之間按照fair Scheduling方式進行分發;同時這些queue也按照相同的方式分發給他們的子queue。App只能在葉子queue上進行調度。
c)?????????Queue的名字:parent.queuename
d)????????Fair scheduler允許按照用戶的需要對不同的queue設置不同的客戶策略,以便按照用戶的需要共享資源。可選的調度策略包括:FIFOPolicy,?FairSharePolicy,DRFPolicy。
Fair Scheduler除了提供公平共享,同時也能夠提供最小共享保證,這對于保證某些user,group或者產品app總是能夠得到足夠的資源是非常有用的。當一個queue包含app時,它至少能夠分配到最小的share,但是如果當這個queue不需要他所有的share時,超額部分可以分配給其他app。這可以在保證queue capacity的同時,在queue中沒有app時有效提供資源利用率。
4.3.1????????Fair Scheduler調度流程
Fair Scheduler的調度流程:
對Queue進行排序,使用SchedulingAlgorithms.FairShareComparator排序。排序規則如下
1)????比較?資源使用量?< min(資源需求量,最小份額),即是否饑餓;
2)????比較?資源分配比=資源使用量/min(資源需求量,?最小份額, 1)
3)????比較?使用量與權重的比例?=資源使用量/權值,小的排前面,?即權重大的優先,?使用量小的優先
4)????比較?提交時間,早的優先, app id小的排前面。
排序之后,第一個隊列成為最優先分配資源的隊列。因此只需要把資源分配給該隊列;
然后基于特定策略(FIFO,Fair,DRF等)將資源分配給應用;
如果第一個隊列不需要資源,則繼續分配給下一個隊列。如果已經分配則繼續執行第一步,直到資源分配完成。
4.3.2????????Fair Scheduler支持的配置文件
Fair Scheduling支持的配置,主要有兩類,一類是Scheduler范圍的,在yarn-site.xml,另一類主要是在allocation file中,用于表示存在哪些queue以及他們相應的weights和capacities。
a)?????????在yarn-site.xml
i.??????????????Allocation.file : allocation file的路徑。
ii.??????????????User-as-default-queue:是否使用分配相關的用戶名作為默認的queue name。
iii.??????????????Preemption:是否使用搶占;
iv.??????????????Preemption.cluster-utilization-threshhold:搶占觸發的利用率閾值。
v.??????????????Sizebasedweight:是否基于app的size去分配shares,而不是等價共享。Size = loge(1 + requested memory) / loge(2)??此處并未說明request memory的單位。
vi.??????????????Assignmultiple:是否允許在一個心跳中有多個container分配。
vii.??????????????Max.assign:如果assignmultiple是true,則該字段表示最多多少個。
viii.??????????????Locality.threshold.node:對于指定node請求container的APP,該參數指定了在其他節點上放置app之前在指定node上獲得最后一個container的嘗試調度次數。
ix.??????????????Locality.threshold.rack:與node的概念相似,只是修改為rack;
x.??????????????Allow-undeclared-pools:用于表示是否允許創建未指定的pool,在app提交的時候,如果submitter指定的app queue或者由user-as-default-queue使用的queue不存在是,該特性會創建對應的queue。如果該參數未指定,那么就會放到default queue。
xi.??????????????Update-interval-ms:鎖定調度器,重新計算公平共享,重新計算需求,檢查是否應該得到搶占的時間間隔。
b)????????在allocation file中
i.??????????????Queue elements
1.?????????minResources:queue能夠得到的最小資源。如果queue的最小共享沒有得到滿足,那么在同一個parent下,他會優先得到共享資源。如果多個queue資源沒有得到滿足,那么獲得資源比例最小的queue具有最高優先級。
2.?????????maxResources:queue最大能夠得到的資源。
3.?????????maxRunningApps:queue并發運行的app數量;
4.?????????maxAMShare:在一個queue中AM所能占用的資源比例。
5.?????????weight:queue的權值。權值為2的queue能得到的資源機會是權值為1的queue的兩倍(這個權值和指定的資源量之間是什么關系,是否例如權值是2,mem是1G,vcore是2的queue?和?權值是1,mem是2G,vcore是4的queue之間怎么分配資源)
6.?????????schedulingPolicy:調度策略,fifo,fair,drf。其中fifo是指先提交的app優先獲得container,后達到的在有剩余資源的時候才能運行。
7.?????????aclSubmitApps:可以提交app到該queue的user或者group列表;
8.?????????aclAdministerApps:可以管理該queue的user或者group列表
9.?????????minSharePreemptionTimeout:queue在最小share無法滿足的情況下,搶占其他queue資源之前的等待時間;
10.?????fairSharePreemptionTimeout:queue在低于公平共享閾值的情況下,搶占其他queue資源之前的等待時間;
11.?????fairSharePreemptionThreshold:queue的公平共享搶占閾值,如果沒有設置就從父親繼承。
ii.??????????????User elements:user管理行為設置。
1.?????????MaxRunningApps:設置單個app并發運行app數量
iii.??????????????userMaxAppsDefault:任一用戶的缺省運行app數目。
iv.??????????????defaultFairSharePreemptionTimeout:root queue的缺省公平共享搶占超時時間
v.??????????????defaultMinSharePreemptionTimeout:root queue的缺省最小共享搶占超時時間
vi.??????????????defaultFairSharePreemptionThreshold?:root queue的公平共享搶占閾值;
vii.??????????????queueMaxAppsDefault?:queue的缺省運行app數;
viii.??????????????queueMaxAMShareDefault?:queue的缺省AM資源限制;
ix.??????????????defaultQueueSchedulingPolicy?:queue缺省的調度策略;
x.??????????????queuePlacementPolicy?:要求調度器將app放置到queue中的規則列表
前文:
Free Style】Hadoop-Yarn之Resource Manager源碼分析(一)
【Free Style】Hadoop-Yarn之Resource Manager源碼分析(二)
【Free Style】Hadoop-Yarn之Resource Manager源碼分析(三)
Hadoop
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。