Slots是Hadoop的一個重要概念。然而在Hadoop相關(guān)論文,slots的闡述難以理解。網(wǎng)上關(guān)于slots的概念介紹也很少,而對于一個有經(jīng)驗的Hadoop開發(fā)者來說,他們可能腦子里已經(jīng)理解了slots的真正含義,但卻難以清楚地表達出來,Hadoop初學(xué)者聽了還是云里霧里。我來嘗試講解一下,以期拋磚引玉。
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出城區(qū)免費做網(wǎng)站回饋大家。
首先,slot不是CPU的Core,也不是memory chip,它是一個邏輯概念,一個節(jié)點的slot的數(shù)量用來表示某個節(jié)點的資源的容量或者說是能力的大小,因而slot是 Hadoop的資源單位。
Hadoop利用slots來管理分配節(jié)點的資源。每個Job申請資源以slots為單位,每個節(jié)點會確定自己的計算能力以及memory確定自己包含的slots總量。當(dāng)某個Job要開始執(zhí)行時,先向JobTracker申請slots,JobTracker分配空閑的slots,Job再占用slots,Job結(jié)束后,歸還slots。每個TaskTracker定期(例如淘寶Hadoop心跳周期是5s)通過心跳(hearbeat)與Jobtracker通信,一方面匯報自己當(dāng)前工作狀態(tài),JobTracker得夠某個TaskTracker是否Alive;同時匯報自身空閑slots數(shù)量。JobTracker利用某個調(diào)度規(guī)則,如Hadoop默認(rèn)調(diào)度器FIFO或者Capacity Scheduler、FairScheduler等。(注:淘寶Hadoop使用云梯調(diào)度器YuntiScheuler,它是基于Fair Scheduler進行修改的)。
Hadoop里有 兩種slots, map slots和reduce slots,map task使用map slots,一一對應(yīng),reduce task使用reduce slots。注: 現(xiàn)在越來越多的觀點認(rèn)為應(yīng)該打破map slots與 reduce slots的界限,應(yīng)該被視為統(tǒng)一的資源池,they are all resource,從而提高資源的利用率。區(qū)分map slots和reduce slots,容易導(dǎo)致某一種資源緊張,而另一個資源卻有空閑。在Hadoop的下一代框架MapR中,已經(jīng)取消了map slots與reduce slots的概念,并將Jobtracker的功能一分為二,用ResourceManager來管理節(jié)點資源,用ApplicationMaster來監(jiān)控與調(diào)度作業(yè)。ApplicationMaster是每個Application都有一個單獨的實例,application是用戶提交的一組任務(wù),它可以是一個或多個job的任務(wù)組成。
Hadoop中通常每個tasktracker會包含多個slots,Job的一個task均對應(yīng)于tasktracker中的一個slot。系統(tǒng)中map slots總數(shù)與reducer slots總數(shù)的計算公式如下:
Map slots總數(shù)=集群節(jié)點數(shù)×mapred.tasktracker.map.tasks.maximum
Reducer slots總數(shù)=集群節(jié)點數(shù)×mapred.tasktracker.reduce.tasks.maximum