當前位置:法律諮詢服務網 - 企業資訊 - 怎麽優化hadoop任務調度算法

怎麽優化hadoop任務調度算法

首先介紹了Hadoop平臺下作業的分布式運行機制,然後對Hadoop平臺自帶的4種任務調度器做分析和比較,最後在分析JobTracker類文件的基礎上指出了創建自定義任務調度器所需完成的工作。

首先Hadoop集群式基於單服務器的,只有壹個服務器節點負責調度整個集群的作業運行,主要的具體工作是切分大數據量的作業,指定哪些Worker節點做Map工作、哪些Worker節點做Reduce工作、與Worker節點通信並接受其心跳信號、作為用戶的訪問入口等等。其次,集群中的每個Worker節點相當於壹個器官,運行著主節點所指派的具體作業。這些節點會被分為兩種類型,壹種是接收分塊之後的作業並做映射工作。另壹種是負責把前面所做的映射工作按照約定的規則做壹個統計。

Task-Tracker通過運行壹個簡單循環來定期地發送心跳信號(heartbeat)給JobTracker.這個心跳信號會把TaskTracker是否還在存活告知JobTracker,TaskTracker通過信號指明自己是否已經準備

好運行新的任務.壹旦TaskTracker已經準備好接受任務,JobTracker就會從作業優先級表中選定壹個作業並分配下去.至於到底是執行Map任務還是Reduce任務,是由TaskTracker的任務槽所決定的.默認的任務調度器在處理Reduce任務之前,會優先填滿空閑的Map任務槽.因此,如果TaskTracker滿足存在至少壹個空閑任務槽時,JobTracker會為它分配Map任務,否則為它選擇壹個Reduce任務.TaskTracker在運行任務的時候,第壹步是從***享文件系統中把作業的JAR文件復制過來,從而實現任務文件的本地化.第二步是TaskTracker為任務新建壹個本地文件夾並把作業文件解壓在此目錄中.第三步是由Task-Tracker新建壹個TaskRunner實例來運行該任務.

Hadoop平臺默認的調度方案就是JobQueueTaskScheduler,這是壹種按照任務到來的時間先後順序而執行的調度策略.這種方式比較簡單,JobTracker作為主控節點,僅僅是依照作業到來的先後順序而選擇將要執行的作業.當然,這有壹定的缺陷,由於Hadoop平臺是默認將作業運行在整個集群上的,那麽如果壹個耗時非常大的作業進入執行期,將會導致其余大量作業長時間得不到運行.這種長時間運行的優先級別並不高的作業帶來了嚴重的作業阻塞,使得整個平臺的運行效率處在較低的水平.Hadoop平臺對這種FIFO(First INAnd First Out)機制所給出的解決辦法是調用SetJobPriority()方法,通過設置作業的權重級別來做平衡調度.

Fair Scheduler是壹種“公平”調度器,它的目標是讓每個用戶能夠公平地***享Hadoop集群計算能力.當只有壹個作業運行的時候,它會得到整個集群的資源.隨著提交到作業表中作業的增多,Hadoop平臺會把集群中空閑出來的時間槽公平分配給每個需要執行的作業.這樣即便其中某些作業需要較長時間運行,平臺仍然有能力讓那些短作業在合理時間內完成[3].Fair Scheduler支持資源搶占,當壹個資源池在壹定時段內沒有得到公平***享時,它會終止該資源池所獲得的過多的資源,同時把這些釋放的資源讓給那些資源不足的資源池.

Hadoop平臺中的Capacity Scheduler是由Yahoo貢獻的,在調度器上,設置了三種粒度的對象:queue,job,task.在該策略下,平臺可以有多個作業隊列,每個作業隊列經提交後,都會獲得壹定數量的TaskTracker資源.具體調度流程如下.

(1)選擇queue,根據資源庫的使用情況從小到大排序,直到找到壹個合適的job.

(2)選擇job,在當前所選定的queue中,按照作業提交的時間先後以及作業的權重優先級別進行排序,選擇合適的job.當然,在job選擇時還需要考慮所選作業是否超出目前現有的資源上限,以及資源池中的內存是否夠該job的task用等因素.

(3)選擇task,根據本地節點的資源使用情況來選擇合適的task.

雖然Hadoop平臺自帶了幾種調度器,但是上述3種調度方案很難滿足公司復雜的應用需求.因此作為平臺的個性化使用者,往往需要開發自己的調度器.Hadoop的調度器是在JobTracker中加載和調用的,因此開發壹個自定義的調度器就必須搞清楚JobTracker類文件的內部機制.作為Hadoop平臺的核心組件,JobTracker監控著整個集群的作業運行情況並對資源進行管理調度.每個Task-Tracker每隔3s通過heartbeat向JobTracker匯報自己管理的機器的壹些基本信息,包括內存使用量、內存的剩余量以及空閑的slot數目等等[5].壹

旦JobTracker發現了空閑slot,便會調用調度器中的AssignTask方法為該TaskTracker分配task。

  • 上一篇:隕石是怎麽鑒定的?
  • 下一篇:掌門1對1的是騙子嗎
  • copyright 2024法律諮詢服務網