簡體   English   中英

集群的作業調度算法

[英]Job scheduling algorithm for cluster

我正在尋找適合以下問題的算法:

有多台計算機(確切數字未知)。 每台計算機從某個中央隊列中提取作業,完成作業,然后提取下一個。 作業是由某些用戶組產生的。 有些用戶提交很多工作,有些則提交一些。 作業消耗相等的CPU時間(不是真的,只是近似值)。

安排作業時,中央隊列應該公平。 另外,提交大量工作的用戶應該擁有最少的資源份額。

我正在為此計划尋找一個好的算法。

被認為是兩個候選人:

  1. 類似於Hadoop的公平調度程序。 這里的問題是:當群集大小未知時,我可以在哪里獲取最少的份額?
  2. 將罰款與每個用戶相關聯。 安排用戶的工作時增加罰款。 使用向用戶調度作業的概率為1 - (normalized penalty) 這有點像大步調度,但是我找不到很好的解釋。

當我實現了一個非常相似的工作運行程序(用於生產系統)時,我結束了讓每個服務器隨機選擇工作類型的任務。 這是我的理由-

  • 來自一個用戶的大量工作不應影響其他用戶運行其工作的機會(用戶-用戶公平性)

  • 一種工作類型過剩不應影響其他工作類型運行的機會(用戶職位和工作職位公平性)

  • 如果一位用戶等待運行的作業類型只有一種,則所有服務器都應運行這些作業(不浪費容量)

  • 系統應“公平地”運行作業,即與等待的用戶和作業類型的數量成正比,而不是與總的等待作業成比例(一種作業類型的數量過多,不應引起計划的支持)(作業類型公平性)

  • 服務器的數量可以變化,並且事先未知

  • 調度程序知道等待的作業,作業類型和用戶元數據,但作業數據不知道(即,用戶名,作業名和計數,而不是有效負載)

  • 我還希望每台服務器都是獨立的,以自動安排自己的工作,而不必了解其他服務器

我確定的解決方案是通過其{user,jobtype}屬性元組跟蹤等待的作業,並讓每個調度步驟隨機選擇5個元組,然后從每個元組中最多選擇10個要運行的作業。 選定的工作入圍,由下一個可用的運行者運行。 每當釋放出容量來運行更多作業時(由於作業完成或由於二級限制而導致它們無法運行),請運行另一個計划步驟以獲取更多工作。

作業被原子鎖定,這是被提取的一部分。 鎖阻止了它們再次被獲取或參與進一步的調度決策。 如果它們無法運行,它們將被解鎖,從而有效地將它們返回到池中。 鎖超時,因此運行它們的服務器負責使鎖保持刷新狀態(如果服務器崩潰,其他服務器將使其鎖超時,並拾取並運行它已啟動但未完成的作業)

對於我的用例,我希望具有作業A.1,A.2,A.3和B.1的用戶A和B分別獲得25%的資源(即使這意味着用戶A在用戶B的25中獲得75%的資源) %)。 在四個元組之間隨機選擇可能會收斂到25%。

如果您希望用戶A和B分別擁有50-50的資源分配,並且讓A的A.1,A.2和A.3與B的B.1擁有相等的份額,則可以運行兩級調度程序,然后隨機選擇用戶,然后從這些用戶中選擇工作。 這將在用戶之間平均分配資源,並在作業類型之間平均分配每個用戶的作業資源。

大量特定工作類型的工作將花費很長時間才能完成,但情況總是如此。 通過從多個用戶中進行選擇,然后選擇作業類型,將不會對作業處理的響應性產生不利影響。

可以添加許多次要限制(例如,每秒不超過5個打入linkedin的呼叫),但這是系統的核心。

您可以嘗試使用Adaptive Computing的 Torque資源管理和Maui批處理作業計划軟件。 毛伊島的政策足夠靈活,可以滿足您的需求。 它支持回填,可配置的作業和用戶優先級以及資源預留。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM