亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

MapReduce架構(gòu)中的資源管理方法、裝置和架構(gòu)系統(tǒng)的制作方法

文檔序號(hào):6499664閱讀:231來(lái)源:國(guó)知局
MapReduce架構(gòu)中的資源管理方法、裝置和架構(gòu)系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例公開了一種用于MapReduce架構(gòu)中的資源管理的方法、裝置和MapReduce架構(gòu)系統(tǒng)。該方法包括:確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R;確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size;根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大??;以及將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。通過(guò)利用上述方法,可以盡量避免磁盤溢出,從而提高處理效率,避免資源浪費(fèi)。
【專利說(shuō)明】MapReduce架構(gòu)中的資源管理方法、裝置和架構(gòu)系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及MapReduce架構(gòu),并且更具體地,涉及MapReduce架構(gòu)中用于資源管理的方法和裝置以及具有該裝置的MapReduce架構(gòu)系統(tǒng)。
【背景技術(shù)】
[0002]MapReduce架構(gòu)是一種編程模型架構(gòu),用于大規(guī)模數(shù)據(jù)集(例如大于1TB)的并行運(yùn)算。MapReduce通過(guò)借助于主控節(jié)點(diǎn)的控制將數(shù)據(jù)集的大規(guī)模操作分發(fā)給網(wǎng)絡(luò)上的計(jì)算節(jié)點(diǎn)來(lái)進(jìn)行分布式處理,以提高對(duì)大規(guī)模數(shù)據(jù)的執(zhí)行速度和效率。MapReduce將諸如對(duì)大量數(shù)據(jù)進(jìn)行詞頻統(tǒng)計(jì)之類的MapReduce作業(yè)劃分為多個(gè)Map (映射)任務(wù)和多個(gè)Reduce (化簡(jiǎn))任務(wù),Map任務(wù)的輸出結(jié)果作為Reduce任務(wù)的輸入數(shù)據(jù)。
[0003]目前,MapReduce架構(gòu)包括將近200個(gè)系統(tǒng)參數(shù),用戶通過(guò)設(shè)置這些系統(tǒng)參數(shù)中的一部分或全部來(lái)指定能夠用于處理一個(gè)MapReduce作業(yè)的資源以及如何利用這些資源等。然而,這些系統(tǒng)參數(shù)的設(shè)置是由用戶根據(jù)經(jīng)驗(yàn)等人為確定的,而沒(méi)有考慮到節(jié)點(diǎn)的處理能力和/或資源情況。這樣設(shè)置出來(lái)的系統(tǒng)參數(shù)常常并不優(yōu)化,例如,用戶自己設(shè)置的系統(tǒng)參數(shù)可能導(dǎo)致節(jié)點(diǎn)處理效率低下等問(wèn)題。
[0004]舉例來(lái)說(shuō),假設(shè)MapReduce中一個(gè)Map任務(wù)需要處理的輸入切片大小為1000MB,對(duì)應(yīng)的輸出數(shù)據(jù)為300MB。如果該Map任務(wù)占用Map資源槽(slot)后被分配的內(nèi)存為100MB,那么,由于輸出數(shù)據(jù)大于內(nèi)存,所以Map操作后得到的每條記錄將首先作為中間結(jié)果溢出到磁盤,再由該Map任務(wù)分三次從磁盤讀取中間結(jié)果,對(duì)其進(jìn)行排序和合并,并將最終的Map輸出結(jié)果再次溢出到磁盤,以供Reduce任務(wù)讀取。
[0005]在這種情況下,由于Map任務(wù)的輸入切片大小過(guò)大,使得Map輸出結(jié)果的數(shù)據(jù)量(300MB)大于能夠處理該Map任務(wù)的內(nèi)存大小(100MB),造成了需要將對(duì)輸入數(shù)據(jù)進(jìn)行Map操作得到的數(shù)據(jù)首先溢出到磁盤中、再多次對(duì)磁盤進(jìn)行反復(fù)讀寫才能得到最終Map輸出結(jié)果的問(wèn)題,嚴(yán)重影響處理效率。

【發(fā)明內(nèi)容】

[0006]本發(fā)明實(shí)施例提供了用于MapReduce架構(gòu)中的資源管理的方法、裝置和MapReduce架構(gòu)系統(tǒng),能夠盡可能避免在Map任務(wù)的輸入切片大小與內(nèi)存不匹配的情況下所造成的反復(fù)對(duì)磁盤進(jìn)行讀寫的問(wèn)題,從而提高M(jìn)ap任務(wù)的處理效率。
[0007]根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于MapReduce架構(gòu)中的資源管理的方法,包括:確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R ;確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size ;根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大?。灰约皩⒋幚淼腗apReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
[0008]根據(jù)本發(fā)明的另一方面,提供了一種用于MapReduce架構(gòu)中的資源管理的裝置,包括:第一確定部件,被配置為確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R ;第二確定部件,被配置為確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memoy_Size ;第三確定部件,被配置為根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大小;以及第一分配部件,被配置為將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
[0009]根據(jù)本發(fā)明的再一方面,提供了一種包含上述裝置的MapReduce架構(gòu)系統(tǒng)。
[0010]根據(jù)本發(fā)明實(shí)施例提供的上述技術(shù)方案,通過(guò)預(yù)先估計(jì)出一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小,可以根據(jù)該內(nèi)存大小向占用該Map資源槽的Map任務(wù)分配相匹配的輸入切片大小,從而盡可能避免輸入切片大小和內(nèi)存大小不匹配而導(dǎo)致的多次磁盤溢出以及在該情況下造成的對(duì)磁盤的反復(fù)讀寫,因此能夠提高M(jìn)ap任務(wù)的處理效率,避免資源浪費(fèi)。
【專利附圖】

【附圖說(shuō)明】
[0011]通過(guò)結(jié)合附圖對(duì)本公開示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯,其中,在本公開示例性實(shí)施方式中,相同的參考標(biāo)號(hào)通常代表相同部件。
[0012]圖1示出了適于用來(lái)實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖。
[0013]圖2是根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的方法的流程圖。
[0014]圖3是根據(jù)本發(fā)明實(shí)施例的確定Map任務(wù)的輸入切片大小的方法的流程圖。
[0015]圖4是根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的另一方法的流程圖。
[0016]圖5是根據(jù)本發(fā)明實(shí)施例的針對(duì)Reduce任務(wù)的狀態(tài)遷移的例子。
[0017]圖6是利用根據(jù)本發(fā)明實(shí)施例的方法來(lái)處理一個(gè)MapReduce作業(yè)的示例性方法的流程圖。
[0018]圖7是根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的裝置的結(jié)構(gòu)框圖。
[0019]圖8是根據(jù)本發(fā)明實(shí)施例的用于該MapReduce架構(gòu)中的資源管理的另一裝置的結(jié)構(gòu)框圖。
[0020]圖9是根據(jù)本發(fā)明實(shí)施例的MapReduce架構(gòu)系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0021]下面將參照附圖更詳細(xì)地描述本公開的優(yōu)選實(shí)施方式。雖然附圖中顯示了本公開的優(yōu)選實(shí)施方式,然而應(yīng)該理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0022]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本公開可以具體實(shí)現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0023]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀的介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0024]計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于——電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0025]計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于一無(wú)線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0026]可以以一種或多種程序設(shè)計(jì)語(yǔ)言或其組合來(lái)編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語(yǔ)言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言一諸如Java、Smalltalk、C++,還包括常規(guī)的過(guò)程式程序設(shè)計(jì)語(yǔ)言一諸如”C”語(yǔ)言或類似的程序設(shè)計(jì)語(yǔ)言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng)連接)。
[0027]下面將參照本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,這些計(jì)算機(jī)程序指令通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0028]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在能使得計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出一個(gè)包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。
[0029]也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程,從而使得在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令能夠提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過(guò)程。[0030]圖1示出了適于用來(lái)實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖。圖1顯示的計(jì)算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施例的功能和使用范圍帶來(lái)任何限制。
[0031]如圖1所示,計(jì)算機(jī)系統(tǒng)/服務(wù)器12以通用計(jì)算設(shè)備的形式表現(xiàn)。計(jì)算機(jī)系統(tǒng)/服務(wù)器12的組件可以包括但不限于:一個(gè)或者多個(gè)處理器或者處理單元16,系統(tǒng)存儲(chǔ)器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲(chǔ)器28和處理單元16)的總線18。
[0032]總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲(chǔ)器總線或者存儲(chǔ)器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來(lái)說(shuō),這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強(qiáng)型ISA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局域總線以及外圍組件互連(PCI)總線。
[0033]計(jì)算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計(jì)算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計(jì)算機(jī)系統(tǒng)/服務(wù)器12訪問(wèn)的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動(dòng)的和不可移動(dòng)的介質(zhì)。
[0034]系統(tǒng)存儲(chǔ)器28可以包括易失性存儲(chǔ)器形式的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲(chǔ)器(RAM)30和/或高速緩存存儲(chǔ)器32。計(jì)算機(jī)系統(tǒng)/服務(wù)器12可以進(jìn)一步包括其它可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì)。僅作為舉例,存儲(chǔ)系統(tǒng)34可以用于讀寫不可移動(dòng)的、非易失性磁介質(zhì)(圖1未顯示,通常稱為“硬盤驅(qū)動(dòng)器”)。盡管圖1中未示出,可以提供用于對(duì)可移動(dòng)非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動(dòng)器,以及對(duì)可移動(dòng)非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動(dòng)器。在這些情況下,每個(gè)驅(qū)動(dòng)器可以通過(guò)一個(gè)或者多個(gè)數(shù)據(jù)介質(zhì)接口與總線18相連。存儲(chǔ)器28可以包括至少一個(gè)程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個(gè))程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實(shí)施例的功能。
[0035]具有一組(至少一個(gè))程序模塊42的程序/實(shí)用工具40,可以存儲(chǔ)在例如存儲(chǔ)器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個(gè)或者多個(gè)應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個(gè)或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施例中的功能和/或方法。
[0036]計(jì)算機(jī)系統(tǒng)/服務(wù)器12也可以與一個(gè)或多個(gè)外部設(shè)備14 (例如鍵盤、指向設(shè)備、顯示器24等)通信,還可與一個(gè)或者多個(gè)使得用戶能與該計(jì)算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè)備通信,和/或與使得該計(jì)算機(jī)系統(tǒng)/服務(wù)器12能與一個(gè)或多個(gè)其它計(jì)算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過(guò)輸入/輸出(I/O)接口 22進(jìn)行。并且,計(jì)算機(jī)系統(tǒng)/服務(wù)器12還可以通過(guò)網(wǎng)絡(luò)適配器20與一個(gè)或者多個(gè)網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過(guò)總線18與計(jì)算機(jī)系統(tǒng)/服務(wù)器12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合計(jì)算機(jī)系統(tǒng)/服務(wù)器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動(dòng)器、冗余處理單元、外部磁盤驅(qū)動(dòng)陣列、RAID系統(tǒng)、磁帶驅(qū)動(dòng)器以及數(shù)據(jù)備份存儲(chǔ)系統(tǒng)等。
[0037]首先參照?qǐng)D2,描述根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的方法 200。
[0038]如圖2所示,方法200包括:在S210中,確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R ;在S220中,確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size ;在S230中,根據(jù)所確定的r、R和Mem0ry_SiZe,確定適合該Map任務(wù)的輸入切片大?。灰约霸赟240中,將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
[0039]上述方法200例如可以由應(yīng)用MapReduce架構(gòu)的網(wǎng)絡(luò)中的主控節(jié)點(diǎn)執(zhí)行,也可以由將處理Map任務(wù)的計(jì)算節(jié)點(diǎn)執(zhí)行,還可以由主控節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)配合執(zhí)行。通過(guò)向占用Map資源槽的Map任務(wù)分配與該Map資源槽對(duì)應(yīng)的內(nèi)存相匹配的輸入分片,可以避免數(shù)據(jù)多次被溢出到磁盤而產(chǎn)生的反復(fù)讀寫磁盤,由此提高處理效率。
[0040]這里,資源槽對(duì)應(yīng)的內(nèi)存指的是占用該資源槽的任務(wù)能夠被分配的內(nèi)存。具體而言,Map資源槽對(duì)應(yīng)的內(nèi)存表示占用該Map資源槽的Map任務(wù)能夠被分配的內(nèi)存,以及,在下文中描述的Reduce資源槽對(duì)應(yīng)的內(nèi)存表示占用該Reduce資源槽的Reduce任務(wù)能夠被分配的內(nèi)存。
[0041]根據(jù)本發(fā)明的實(shí)施例,作為Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比的r和作為Map輸出結(jié)果中記錄的平均大小的R可以通過(guò)探測(cè)的方式得到,也可以通過(guò)讀取歷史記錄得到。
[0042]具體而言,例如,可以預(yù)先運(yùn)行一個(gè)或多個(gè)Map任務(wù),并根據(jù)運(yùn)行后得到的結(jié)果確定r和R。預(yù)先運(yùn)行的Map任務(wù)可以是任意MapReduce作業(yè)對(duì)應(yīng)的Map任務(wù),例如,可以是待處理的MapRuduce作業(yè)對(duì)應(yīng)的Map任務(wù),也可以是提前準(zhǔn)備好的由測(cè)試數(shù)據(jù)構(gòu)成的Map任務(wù)。由于通常每個(gè)Map任務(wù)包含的記錄數(shù)量非常多,因此對(duì)于一個(gè)或多個(gè)Map任務(wù)的統(tǒng)計(jì)特征可以基本上表征任意Map任務(wù)的個(gè)體特征。通常認(rèn)為在MapReduce架構(gòu)中每個(gè)Mapper(映射器,處理Map任務(wù)的處理器)的工作負(fù)載特性基本上相同,不同Map任務(wù)的輸入數(shù)據(jù)量和輸出數(shù)據(jù)量之間的比例關(guān)系近似,并且每個(gè)Map輸出記錄的長(zhǎng)度也非常近似。因此,可以通過(guò)預(yù)先運(yùn)行一個(gè)Map任務(wù),根據(jù)該Map任務(wù)的輸入數(shù)據(jù)量和輸出數(shù)據(jù)量來(lái)確定r,并根據(jù)Map任務(wù)的輸出數(shù)據(jù)量和輸出記錄數(shù)來(lái)確定R。其中,r等于Map任務(wù)的輸入字節(jié)除以Map任務(wù)的輸出字節(jié),R等于Map任務(wù)的輸出字節(jié)除以Map任務(wù)的輸出記錄數(shù)。也可以預(yù)先運(yùn)行多個(gè)Map任務(wù),將這些Map任務(wù)中的每一個(gè)的輸入和輸出數(shù)據(jù)量之比取平均值來(lái)作為r,將這些Map任務(wù)所有輸出字節(jié)之和除以輸出的總記錄數(shù)求得的商作為R。
[0043]再例如,由于MapReduce架構(gòu)在執(zhí)行一個(gè)MapReduce作業(yè)之后將生成日志信息,因此通過(guò)閱讀歷史日志信息,可以確定r和R。本領(lǐng)域技術(shù)人員都清楚地知道在MapReduce作業(yè)處理之后,通過(guò)任務(wù)級(jí)的內(nèi)建計(jì)數(shù)器可以得到包含Map任務(wù)的輸入字節(jié)、Map任務(wù)的輸出字節(jié)和Map輸出記錄數(shù)等的日志信息。本發(fā)明實(shí)施例充分利用這些日志信息來(lái)提取所需的r和R。具體而言,通過(guò)將日志信息中的Map任務(wù)的輸入字節(jié)除以Map任務(wù)的輸出字節(jié)可以得到r,以及通過(guò)將Map輸出字節(jié)除以Map輸出記錄數(shù)可以得到R。
[0044]能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size表示在Map任務(wù)占用Map資源槽的情況下,該Map資源槽對(duì)應(yīng)的能夠用于處理該Map任務(wù)的內(nèi)存大小。例如,在Java編程中,能夠分配給諸如Map任務(wù)、Reduce任務(wù)等任務(wù)的內(nèi)存大小可以用JVM_Heap_Size表示。當(dāng)然,本領(lǐng)域技術(shù)人員可以理解,能夠分配給Map任務(wù)的內(nèi)存大小也可以用其它參數(shù)形式來(lái)表示。要注意的是,在這里各參數(shù)的表現(xiàn)形式只是為了使本領(lǐng)域技術(shù)人員能夠更好地理解本發(fā)明,而并不對(duì)本發(fā)明的保護(hù)范圍構(gòu)成任何限制。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,可以根據(jù)用于并行執(zhí)行Map任務(wù)的資源槽總數(shù)和用于并行執(zhí)行Map任務(wù)的總內(nèi)存,來(lái)確定Memory_Si ze。例如,首先,可以根據(jù)核(例如CPU )的數(shù)量來(lái)確定Map資源槽能力(即,一次可以同時(shí)執(zhí)行的Map任務(wù)個(gè)數(shù))Mc和Reduce資源槽能力(即,一次可以同時(shí)執(zhí)行的Reduce任務(wù)個(gè)數(shù))Re,此時(shí)可以確定Mc和Re都等于核的數(shù)量,即Mc = Re =核的數(shù)量。由于每個(gè)核可以同時(shí)兼處理Map任務(wù)和Reduce任務(wù),因此一次可以同時(shí)執(zhí)行的Map任務(wù)個(gè)數(shù)等于核數(shù),一次可以同時(shí)執(zhí)行的Reduce任務(wù)個(gè)數(shù)也等于核數(shù)。然后,可以確定Memory_Size=總內(nèi)存/(Mc+Rc)。這里的總內(nèi)存指的是上述的核能夠利用的總內(nèi)存。由于同構(gòu)網(wǎng)絡(luò),因此可以認(rèn)為每個(gè)資源槽對(duì)應(yīng)的資源情況是相同的。從而,每個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小都是Memory_Size。這樣,只需要計(jì)算一個(gè)Memory_Size,就可以得到每個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小。
[0045]根據(jù)本發(fā)明的另一實(shí)施例,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,可以響應(yīng)于一個(gè)Map資源槽空閑,確定該Map資源槽對(duì)應(yīng)的內(nèi)存大小,并將所確定的該內(nèi)存大小作為Memory_Size。具體而言,由于在異構(gòu)網(wǎng)絡(luò)中每個(gè)資源槽對(duì)應(yīng)的能夠分配給任務(wù)的內(nèi)存可能不同,因此需要根據(jù)每個(gè)資源槽的具體情況來(lái)確定該資源槽對(duì)應(yīng)的內(nèi)存大小,并將其作為該資源槽對(duì)應(yīng)的Memory_Size。在某一 Map資源槽空閑的情況下,由于該Map資源槽對(duì)應(yīng)的資源之前已經(jīng)處理過(guò)Map任務(wù),因此該Map資源槽對(duì)應(yīng)多少內(nèi)存是被網(wǎng)絡(luò)中的主控節(jié)點(diǎn)和/或該Map資源槽所在的計(jì)算節(jié)點(diǎn)所知曉的,由此可以確定該Map資源槽對(duì)應(yīng)的能夠用于處理Map任務(wù)的內(nèi)存大小Memory_Size。
[0046]確定了 r、R和Memory_Size之后,可以確定與該Memory_Size相匹配的Map任務(wù)的輸入切片大小。例如可以采用圖3所示的步驟S310和S320來(lái)確定輸入切片大小Map_input_split_size。
[0047]在S310中,根據(jù)R、Map輸出結(jié)果中一個(gè)記錄所對(duì)應(yīng)的管理開銷和Memory_Size,確定Memory_Size中用于存儲(chǔ)除管理開銷之外的數(shù)據(jù)的內(nèi)存大小Data_Buffer。
[0048]例如,在執(zhí)行Map任務(wù)的情況下,數(shù)據(jù)在內(nèi)存中和在磁盤中的存儲(chǔ)方式都可以具有由管理開銷和數(shù)據(jù)部分組成的數(shù)據(jù)結(jié)構(gòu)。舉例來(lái)說(shuō),在現(xiàn)有的一種MapReduce架構(gòu)(例如,Apache Hadoop MapReduce實(shí)現(xiàn)方式)中,Map任務(wù)的數(shù)據(jù)在內(nèi)存中和在磁盤中進(jìn)行存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)可以針對(duì)記錄進(jìn)行定義,每個(gè)記錄具有相同的數(shù)據(jù)結(jié)構(gòu)。在該數(shù)據(jù)結(jié)構(gòu)中,包括16字節(jié)的管理開銷和R字節(jié)的數(shù)據(jù)部分。16字節(jié)的管理開銷包括12字節(jié)的kvoffsets字段和4字節(jié)的kvindices字段。R字節(jié)的數(shù)據(jù)部分存儲(chǔ)在kvbuffer字段中。當(dāng)然,上述數(shù)據(jù)結(jié)構(gòu)只是一個(gè)例子而并不對(duì)本發(fā)明的保護(hù)范圍構(gòu)成限制,隨著技術(shù)的發(fā)展,可能增加新的字段并占用新的字節(jié)等。
[0049]管理開銷的字節(jié)數(shù)M可以由數(shù)據(jù)結(jié)構(gòu)確定,也可以由所采用的數(shù)據(jù)存儲(chǔ)標(biāo)準(zhǔn)確定。由于R在S210中已經(jīng)通過(guò)探測(cè)或者讀取歷史信息的方式被確定,因此可以確定管理開銷在記錄中所占的比例i0.sort, record.percent=M/(M+R),或者數(shù)據(jù)在一個(gè)記錄中所占的比例R/(M+R)。接著,可以確定在Map資源槽的內(nèi)存Memory_SiZe中用于存儲(chǔ)除管理開銷之外的數(shù)據(jù)的內(nèi)存大小 Data_Buffer=Memory_Size*(l_i0.sort, record, percent) =Memory_Size*R/(M+R)。
[0050]在S320中,根據(jù)Data_Buffer和r,確定適合Map任務(wù)的輸入切片大小。
[0051]具體而言,由于Map任務(wù)的輸入和輸出數(shù)據(jù)量之比在S210中已經(jīng)確定,因此可以適合確定Map任務(wù)的輸入切片大小(即,適合該Map任務(wù)的輸入數(shù)據(jù)量)Map_input_split_size=Data—Buffer^r0
[0052]在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,由于每個(gè)Map資源槽可以認(rèn)為具有相同的資源情況,所以每個(gè)Map資源槽能夠處理的Map任務(wù)的輸入切片大小可以認(rèn)為相等。因此,在確定Map_input_split_size之后,可以根據(jù)待處理的MapReduce作業(yè)的總輸入數(shù)據(jù)量和Map任務(wù)的輸入切片大小,確定該MapReduce作業(yè)的Map任務(wù)數(shù)量。即,該MapReduce作業(yè)需要的Map任務(wù)數(shù)量為該MapReduce作業(yè)的總輸入數(shù)據(jù)量除以Map_input_split_size。
[0053]可以確定按照上述方法得到的Map任務(wù)的輸入切片大小與該Map任務(wù)占用的Map資源槽所對(duì)應(yīng)的內(nèi)存相匹配。通過(guò)將該切片大小的數(shù)據(jù)分配給該Map任務(wù),不會(huì)由于切片大小過(guò)大且內(nèi)存過(guò)小而產(chǎn)生將Map操作得到的每條記錄多次溢出到磁盤的問(wèn)題。也就是說(shuō),利用上述方法不會(huì)產(chǎn)生在Map任務(wù)的執(zhí)行過(guò)程中反復(fù)讀寫磁盤的問(wèn)題。此時(shí),Map資源槽對(duì)應(yīng)的內(nèi)存可以一次性存儲(chǔ)Map操作得到的所有記錄,從而只需要對(duì)磁盤進(jìn)行一次寫操作(即進(jìn)行到磁盤的一次溢出)就可以將Map輸出結(jié)果保存在磁盤中以供Reduce任務(wù)處理。這樣,處理效率得以提高,并且避免多次讀寫磁盤造成資源浪費(fèi)和系統(tǒng)開銷。
[0054]雖然在方法200中S220在S210之后執(zhí)行,但是S220也可以在S210之前執(zhí)行,還可以與S210并發(fā)執(zhí)行 ,本發(fā)明對(duì)此不作限制,只要S220和S210在S230之前執(zhí)行即可。
[0055]根據(jù)本發(fā)明實(shí)施例提供的上述方法,通過(guò)預(yù)先估計(jì)出一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小,可以根據(jù)該內(nèi)存大小向占用該Map資源槽的Map任務(wù)分配相匹配的輸入切片大小,從而盡可能避免輸入切片大小和內(nèi)存大小不匹配而導(dǎo)致的多次磁盤溢出以及在該情況下造成的對(duì)磁盤的反復(fù)讀寫,因此能夠提高M(jìn)ap任務(wù)的處理效率,避免資源浪費(fèi)。此外,由于利用上述方法可以自動(dòng)得到包括內(nèi)存大小、切片大小、任務(wù)數(shù)量等在內(nèi)的參數(shù),并且當(dāng)利用這些參數(shù)時(shí)可以提高處理效率,因此,本發(fā)明實(shí)施例提供的方法可以對(duì)參數(shù)進(jìn)行自動(dòng)優(yōu)化,避免經(jīng)驗(yàn)設(shè)置或缺省設(shè)置參數(shù)導(dǎo)致的資源得不到有效利用的問(wèn)題。
[0056]上面描述了盡可能避免在Map操作時(shí)產(chǎn)生多次磁盤溢出的資源管理方法。然而,不必要的磁盤溢出的問(wèn)題不一定只會(huì)發(fā)生在Map操作時(shí),在Reduce操作時(shí)也可能發(fā)生不必要的磁盤溢出而降低處理效率。例如,由于Reduce任務(wù)數(shù)量的設(shè)置,可能導(dǎo)致Reduce任務(wù)的輸入數(shù)據(jù)量大于該Reduce任務(wù)占用的Reduce資源槽中能夠用于存儲(chǔ)Reduce任務(wù)輸入數(shù)據(jù)的內(nèi)存。由于Reducer (化簡(jiǎn)器,處理Reduce任務(wù)的處理器)要等到所有輸入給它的Map輸出記錄收集完全后才能開始處理,因此,如果輸入給該Reducer的輸入數(shù)據(jù)量大于它使用的內(nèi)存,則需要溢出到磁盤,再通過(guò)從磁盤分多次讀取能夠處理的數(shù)據(jù)量并暫存中間結(jié)果,接著將所有中間結(jié)果進(jìn)行歸并排序才能得到Reduce函數(shù)可以使用的數(shù)據(jù)。
[0057]為了進(jìn)一步避免在Reduce操作時(shí)出現(xiàn)磁盤溢出而導(dǎo)致多次讀寫從而降低處理效率,可以使用根據(jù)本發(fā)明實(shí)施例的方法400。方法400中的S410至S440與方法200中的S210至S240基本相同,為了避免重復(fù),在此不再贅述。
[0058]在S450中,根據(jù)r和MapRuduce作業(yè)的總輸入數(shù)據(jù)量,確定該MapReduce作業(yè)的Map輸出結(jié)果的總數(shù)據(jù)量。
[0059]MapReduce作業(yè)的總輸入數(shù)據(jù)量可以直接根據(jù)該MapReduce作業(yè)對(duì)應(yīng)的文件大小確定。由于r表示Map任務(wù)的輸入和輸出數(shù)據(jù)量之比,因此,Map輸出結(jié)果的總數(shù)據(jù)量(也就是,Reduce操作的總輸入數(shù)據(jù)量)等于MapReduce作業(yè)的總輸入數(shù)據(jù)量除以r。
[0060]在S460中,確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。
[0061]—個(gè)Reduce資源槽對(duì)應(yīng)的總內(nèi)存除了用于存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)之外,還需要處理這些輸入數(shù)據(jù)并輸出處理結(jié)果等。因此,用于存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存可以是占用Reduce資源槽的Reduce任務(wù)被分配的總內(nèi)存的一部分。為了折中存儲(chǔ)Reduce輸入數(shù)據(jù)的操作和包括處理Reduce函數(shù)及其后續(xù)操作的其他操作的處理性能,可以將存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存占用總內(nèi)存的比例設(shè)置為0.5。當(dāng)然,該比例也可以設(shè)置為小于I的其他系數(shù)。
[0062]根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,可以根據(jù)用于并行執(zhí)行Reduce任務(wù)的資源槽總數(shù)、用于并行執(zhí)行Reduce任務(wù)的總內(nèi)存以及小于I的預(yù)定系數(shù),確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。其中,所述預(yù)定系數(shù)是Reduce資源槽中存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存占該資源槽的總內(nèi)存的比例。
[0063]例如,在同構(gòu)網(wǎng)絡(luò)中可以認(rèn)為每個(gè)Map資源槽和每個(gè)Reduce資源槽具有基本上同樣的資源情況。如上所述,一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小是Memory_Size=總內(nèi)存/(Mc+Rc)。在這種情況下,一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小也可以是Memory_Size。因此,Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存等于預(yù)定系數(shù)乘以Memory_Size。當(dāng)預(yù)定系數(shù)是0.5以實(shí)現(xiàn)Reduce操作的處理性能折中時(shí),Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存等于 0.5*Memory_Size。
[0064]根據(jù)本發(fā)明的另一實(shí)施例,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,可以針對(duì)異構(gòu)網(wǎng)絡(luò)中執(zhí)行MapReduce作業(yè)的各Reduce資源槽中的每一個(gè),根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小和小于I的預(yù)定系數(shù),確定該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。例如,在異構(gòu)網(wǎng)絡(luò)中,主控節(jié)點(diǎn)和/或Reduce資源槽所在的計(jì)算節(jié)點(diǎn)知道該Reduce資源槽對(duì)應(yīng)的內(nèi)存,將該內(nèi)存乘以預(yù)定系數(shù)(例如,0.5等其他小于I的系數(shù))可以得到該Reduce資源槽對(duì)應(yīng)的能夠存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存大小。
[0065]在S470中,根據(jù)S460中確定的存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小和S450中確定的Map輸出結(jié)果的總數(shù)據(jù)量,確定MapReduce作業(yè)的Reduce任務(wù)數(shù)量。
[0066]具體而言,Reduce任務(wù)數(shù)量可以等于S450中的Map輸出結(jié)果的總數(shù)據(jù)量除以S460中確定的內(nèi)存大小??梢钥吹?,當(dāng)Reduce資源槽中用于存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存較小時(shí),可以將MapReduce作業(yè)劃分成較多的Reduce任務(wù),這樣,每個(gè)Reduce任務(wù)需要處理的輸入數(shù)據(jù)可以減少以滿足Reduce資源槽的較小的內(nèi)存。在這種情況下,由于Reduce資源槽中存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存與Reduce輸入數(shù)據(jù)可以盡量匹配,因此,可以盡量避免不必要的磁盤溢出而導(dǎo)致多次重復(fù)讀寫,由此可以提高處理效率。
[0067]在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,每個(gè)Reduce資源槽可以具有相同的內(nèi)存和內(nèi)存分配,S470中計(jì)算出的Reduce任務(wù)數(shù)量是MapReduce作業(yè)實(shí)際上對(duì)應(yīng)的Reduce任務(wù)數(shù)量。也就是說(shuō),在同構(gòu)網(wǎng)絡(luò)的情況下,S470中確定的一個(gè)Reduce任務(wù)對(duì)應(yīng)一個(gè)Reducer。然而,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,S470中確定的Reduce任務(wù)數(shù)量可以不等于實(shí)際的Reducer個(gè)數(shù),下面進(jìn)行具體說(shuō)明。[0068]在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,由于Reduce資源槽之間可能具有不同的內(nèi)存大小,在S460中確定的各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小可能彼此不同。這些用于存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存大小可以具有一個(gè)公約數(shù)。那么,根據(jù)本發(fā)明的實(shí)施例,可以根據(jù)S460中確定的各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小的公約數(shù)和S450中確定的Map輸出結(jié)果的總數(shù)據(jù)量,確定MapReduce作業(yè)的Reduce任務(wù)數(shù)量。這里的Reduce任務(wù)數(shù)量等于Map輸出結(jié)果的總數(shù)據(jù)量除以上述公約數(shù)。這樣計(jì)算出的Reduce任務(wù)數(shù)量大于實(shí)際的Reducer數(shù)量。
[0069]在該情況下,可以根據(jù)異構(gòu)網(wǎng)絡(luò)中的各Reduce資源槽各自對(duì)應(yīng)的內(nèi)存大小和上述公約數(shù)的關(guān)系,將不止一個(gè)的根據(jù)上述公約數(shù)劃分的Reduce任務(wù)分配給一個(gè)Reducer。具體來(lái)說(shuō),響應(yīng)于一個(gè)Reduce資源槽空閑,根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的內(nèi)存大小和上述公約數(shù),將具有如下個(gè)數(shù)的Reduce任務(wù)分配給占用該Reduce資源槽的Reduce任務(wù),所述個(gè)數(shù)等于該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小相對(duì)于該公約數(shù)的倍數(shù)。
[0070]舉例來(lái)說(shuō),假設(shè)在異構(gòu)網(wǎng)絡(luò)中有三個(gè)Reduce資源槽,每個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小分別是1200MB、800MB和400MB。當(dāng)預(yù)定系數(shù)是0.5時(shí),這三個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小分別是600MB.400MB和200MB。這里,取這三個(gè)內(nèi)存大小的最大公約數(shù)200MB。通過(guò)200MB和Map輸出結(jié)果的總數(shù)據(jù)量,可以確定Reduce任務(wù)數(shù)量。響應(yīng)于內(nèi)存為1200MB的Reduce資源槽空閑,將3個(gè)(600MB/200MB)Reduce任務(wù)分配給該Reduce資源槽。響應(yīng)于內(nèi)存為800MB的Reduce資源槽空閑,將2個(gè)(400MB/200MB) Reduce任務(wù)分配給該Reduce資源槽。響應(yīng)于內(nèi)存為400MB的Reduce資源槽空閑,將I個(gè)(200MB/200MB) Reduce任務(wù)分配給該Reduce資源槽。當(dāng)然,公約數(shù)也可以是諸如100MB的其他公約數(shù)而不一定是最大公約數(shù)。
[0071]使用最大公約數(shù)的優(yōu)點(diǎn)之一是充分利用每個(gè)計(jì)算節(jié)點(diǎn)中的內(nèi)存。在Reduce任務(wù)槽確定的情況下,能夠并行運(yùn)行的Reduce任務(wù)數(shù)量也是確定的。如果Reduce任務(wù)的輸入數(shù)據(jù)量太小,那么計(jì)算節(jié)點(diǎn)上的內(nèi)存將不能得到充分利用,而如果Reduce任務(wù)的輸入數(shù)據(jù)量太大,那么計(jì)算節(jié)點(diǎn)就會(huì)將Reduce任務(wù)輸入數(shù)據(jù)溢出到磁盤。通過(guò)以公約數(shù)來(lái)進(jìn)行Reduce任務(wù)數(shù)的劃分,可以為占用Reduce資源槽的Reduce任務(wù)分配相適宜的輸入數(shù)據(jù),從而適應(yīng)該Reduce資源槽自身的資源情況,在充分利用其資源的情況下盡量避免不必要的磁盤溢出所導(dǎo)致的處理效率的降低。
[0072]根據(jù)本發(fā)明的實(shí)施例,響應(yīng)于占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作完成,開始還未占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作。
[0073]在傳統(tǒng)的MapReduce架構(gòu)中,只有占用了 Reduce資源槽的Reduce任務(wù)才能讀取相應(yīng)的Map輸出結(jié)果,即,進(jìn)行Shuffle (搬移)操作。等待占用了 Reduce資源槽的Reduce任務(wù)執(zhí)行完畢之后,該Reduce任務(wù)釋放占用的Reduce資源槽。空閑的Reduce資源槽被另一 Reduce任務(wù)占用后,才能開始向該另一 Reduce任務(wù)傳輸對(duì)應(yīng)的Map輸出結(jié)果,即,進(jìn)行與占用Reduce資源槽的該另一 Reduce任務(wù)對(duì)應(yīng)的Shuffle操作。這樣,一個(gè)MapReduce作業(yè)的執(zhí)行將有較大的延時(shí)。每當(dāng)Reduce資源槽空閑出來(lái)之后,才能開始其他Reduce任務(wù)的數(shù)據(jù)讀取和執(zhí)行。[0074]根據(jù)本發(fā)明的實(shí)施例,可以為Reduce任務(wù)的狀態(tài)機(jī)在已有的等待(Pending)狀態(tài)和運(yùn)行(Running)狀態(tài)之間增加一個(gè)數(shù)據(jù)讀取狀態(tài),如圖5所示。處于數(shù)據(jù)讀取狀態(tài)下的Reduce任務(wù),雖然還沒(méi)有占用Reduce資源槽,但是其Shuffle操作已經(jīng)可以開始執(zhí)行了。這樣,一旦處于數(shù)據(jù)讀取狀態(tài)的Reduce任務(wù)占用Reduce資源槽,該Reduce任務(wù)就可以跳過(guò)如現(xiàn)有技術(shù)中那樣需要先讀取Map輸出結(jié)果,而直接進(jìn)入運(yùn)行狀態(tài),由此節(jié)約處理時(shí)間,進(jìn)一步提聞處理效率。
[0075]具體而言,處于等待狀態(tài)的Reduce任務(wù)是還未占用Reduce資源槽的Reduce任務(wù)。在正在占用Reduce資源槽的Reduce任務(wù)中存在一個(gè)Reduce任務(wù)的數(shù)據(jù)讀取操作完成的情況下,該Reduce任務(wù)的Reduce函數(shù)開始執(zhí)行,而還未占用Reduce資源槽的Reduce任務(wù)則可以進(jìn)入數(shù)據(jù)讀取狀態(tài),開始讀取它所對(duì)應(yīng)的Map輸出結(jié)果(S卩,Shuffle操作)。當(dāng)有Reduce資源槽空閑出來(lái)時(shí),通過(guò)主控節(jié)點(diǎn)的調(diào)度,所述還未占用Reduce資源槽的Reduce任務(wù)占用空閑的Reduce資源槽,并進(jìn)入運(yùn)行狀態(tài)而開始Reduce函數(shù)的執(zhí)行。
[0076]此外,在有Reduce任務(wù)的Shuffle操作完成的情況下,可以進(jìn)入數(shù)據(jù)讀取狀態(tài)的Reduce任務(wù)的數(shù)量可以不止一個(gè)。
[0077]通過(guò)為Reduce任務(wù)的執(zhí)行增加數(shù)據(jù)讀取狀態(tài),相比于相關(guān)技術(shù),可以提前向未占用Reduce資源槽的Reduce任務(wù)傳輸對(duì)應(yīng)的Map輸出結(jié)果,從而在實(shí)際的Reduce任務(wù)數(shù)(即,實(shí)際的reducer個(gè)數(shù))大于Reduce資源槽的情況下,減少執(zhí)行所有Reduce任務(wù)的延時(shí),從而進(jìn)一步提聞處理效率。
[0078]雖然在方法400中S450在S440之后執(zhí)行,但是S450與S420至S440之間的執(zhí)行關(guān)系沒(méi)有特別的要求,只要S450在S410之后執(zhí)行即可。此外,S450和S460之間的執(zhí)行順序本發(fā)明也不作限制,只要S450和S460在S470之前執(zhí)行即可。
[0079]圖6具體示出了利用根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法來(lái)處理一個(gè)MapReduce作業(yè)的示例性方法600的流程圖。通過(guò)執(zhí)行圖6中的方法600,可以同時(shí)盡量避免在Map操作和Reduce操作中出現(xiàn)磁盤溢出。這里,以異構(gòu)網(wǎng)絡(luò)為例對(duì)方法600進(jìn)行描述,但是該流程同樣適用于同構(gòu)網(wǎng)絡(luò),不同之處將在下文具體描述。當(dāng)然,本領(lǐng)域技術(shù)人員可以理解,同構(gòu)網(wǎng)絡(luò)作為異構(gòu)網(wǎng)絡(luò)的一種特例,方法600的流程也可以完全適用于同構(gòu)網(wǎng)絡(luò),另外,這里,以網(wǎng)絡(luò)中的主控節(jié)點(diǎn)作為執(zhí)行主體為例來(lái)對(duì)方法600進(jìn)行描述,但是本領(lǐng)域技術(shù)人員可以容易地想到方法600也可以由除主控節(jié)點(diǎn)之外的其他節(jié)點(diǎn)來(lái)執(zhí)行,或者由主控節(jié)點(diǎn)和其他節(jié)點(diǎn)配合執(zhí)行。
[0080]在S610中,方法600開始。
[0081]在S615中,主控節(jié)點(diǎn)通過(guò)嘗試一個(gè)或多個(gè)Map任務(wù)來(lái)得到Map任務(wù)的輸入和輸出數(shù)據(jù)量之比r和Map輸出結(jié)果中一個(gè)記錄的平均大小R。
[0082]在S620中,主控節(jié)點(diǎn)確定是否有Map資源槽可用,S卩,是否有Map資源槽空閑。如果確定有Map資源槽可用,則方法600前進(jìn)到S625,否則方法600繼續(xù)S620。
[0083]在S625中,主控節(jié)點(diǎn)基于r、R以及可用的Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size,確定占用該Map資源槽的Map任務(wù)的輸入切片大小。
[0084]在同構(gòu)網(wǎng)絡(luò)的情況下,S625可以只執(zhí)行一次而被置于S615和S620之間,因?yàn)樵谕瑯?gòu)網(wǎng)絡(luò)的情況下,可以認(rèn)為每個(gè)Map資源槽具有相同的Map任務(wù)的輸入切片大小。
[0085]在S630中,主控節(jié)點(diǎn)基于計(jì)算出的Map任務(wù)的輸入切片大小,將MapReduce作業(yè)中具有該輸入切片大小的數(shù)據(jù)動(dòng)態(tài)分配給占用該Map資源槽的Map任務(wù)。
[0086]在S635中,占用該Map資源槽的Map任務(wù)執(zhí)行。
[0087]在S640中,主控節(jié)點(diǎn)確定是否所有的Map任務(wù)都已經(jīng)執(zhí)行完成。如果確定所有的Map任務(wù)都已經(jīng)執(zhí)行完成,則方法600前進(jìn)到S645,否則方法600返回S620,以等待有Map資源槽空閑來(lái)處理新的Map任務(wù)。
[0088]在S645中,主控節(jié)點(diǎn)根據(jù)各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小,確定這些內(nèi)存大小的公約數(shù),從而將Map輸出結(jié)果的數(shù)據(jù)量除以公約數(shù)的商作為“mini” Reducer的個(gè)數(shù)。所述公約數(shù)可以認(rèn)為是一個(gè)“mini” Reducer的輸入數(shù)據(jù)大小。這里,“mini”Reducer的個(gè)數(shù)是在假設(shè)公約數(shù)是Reducer的輸入數(shù)據(jù)量的情況下所計(jì)算出的Reducer個(gè)數(shù),該個(gè)數(shù)可能大于實(shí)際存在的Reducer個(gè)數(shù)。
[0089]雖然,在方法600中S645在S640之后執(zhí)行,但是S645執(zhí)行順序與S615至S640沒(méi)有關(guān)系。S645只要在S650之前即可,而S650由于需要對(duì)Map輸出結(jié)果進(jìn)行Partition(分片)操作,因此需要在S640之后執(zhí)行。
[0090]在同構(gòu)網(wǎng)絡(luò)的情況下,因?yàn)榭梢哉J(rèn)為每個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小相同,因此不需要執(zhí)行在S645中求取公約數(shù)和“mini ”Reducer的個(gè)數(shù)。在同構(gòu)網(wǎng)絡(luò)中,在S645中,根據(jù)每個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存大小和Map輸出結(jié)果的數(shù)據(jù)量,來(lái)計(jì)算Reducer個(gè)數(shù),此時(shí)計(jì)算出的Reducer個(gè)數(shù)等于實(shí)際的Reducer個(gè)數(shù)。
[0091]在S650中,主控節(jié)點(diǎn)根據(jù)S645中的Reduce任務(wù)數(shù)量對(duì)Map輸出結(jié)果進(jìn)行Partition 操作。
[0092]在S655中,主控節(jié)點(diǎn)確定是否有Reduce資源槽可用,即,是否有Reduce資源槽空閑。如果確定有Reduce資源槽可用,則方法600前進(jìn)到S660,否則方法600繼續(xù)S655。
[0093]在S660中,主控節(jié)點(diǎn)根據(jù)可用的Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的Memory_Size以及小于I的預(yù)定系數(shù),確定出該Reduce資源槽對(duì)應(yīng)的能夠用于存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存大小,并將該內(nèi)存大小作為占用該Reduce資源槽的Reduce任務(wù)的輸入數(shù)據(jù)量。接著,主控節(jié)點(diǎn)根據(jù)該Reduce任務(wù)的輸入數(shù)據(jù)量相對(duì)于公約數(shù)的倍數(shù),將倍數(shù)個(gè)數(shù)的“mini”Reducer合并來(lái)分配給占用該Reduce資源槽的Reduce任務(wù)。
[0094]在同構(gòu)網(wǎng)絡(luò)的情況下,由于在S645中計(jì)算得到的Reducer個(gè)數(shù)等于實(shí)際的Reduce個(gè)數(shù),不存在“mini ” Reducer個(gè)數(shù)的求取,因此在S645中不需要合并一定個(gè)數(shù)的“mini”Reducer。在同構(gòu)網(wǎng)絡(luò)的情況下,由于各Reduce資源槽可以認(rèn)為具有相同的資源情況,因此在S660中,主控節(jié)點(diǎn)根據(jù)各Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的Memory_Size以及小于I的預(yù)定系數(shù),確定各Reduce資源槽對(duì)應(yīng)的能夠用于存儲(chǔ)Reduce輸入數(shù)據(jù)的內(nèi)存大小。由于該內(nèi)存大小對(duì)于各Reduce資源槽相同,因此S660可以只需要執(zhí)行一次而被置于S655之前。
[0095]在S665中,占用該Reduce資源槽的Reduce任務(wù)執(zhí)行。
[0096]在同構(gòu)網(wǎng)絡(luò)中,如常規(guī)技術(shù)中那樣,占用該Reduce資源槽的Reduce任務(wù)被分配有S650中的Partition操作之后對(duì)應(yīng)該Reduce任務(wù)的Reduce輸入數(shù)據(jù)。
[0097]在S670中,主控節(jié)點(diǎn)確定是否所有的Reduce任務(wù)都已經(jīng)執(zhí)行完成。如果確定所有的Reduce任務(wù)都已經(jīng)執(zhí)行完成,那么方法600前進(jìn)到S675,否則方法600返回S655。[0098]在S675中,方法600結(jié)束。
[0099]以同構(gòu)網(wǎng)絡(luò)為例對(duì)本發(fā)明實(shí)施例的方法進(jìn)行說(shuō)明。假設(shè),首先通過(guò)提前運(yùn)行多個(gè)Map任務(wù)可以探測(cè)到r為3、R為每記錄84字節(jié)。在同構(gòu)網(wǎng)絡(luò)中可用于處理MapReduce作業(yè)的計(jì)算節(jié)點(diǎn)有4個(gè),每個(gè)計(jì)算節(jié)點(diǎn)具有2個(gè)核和1200MB的內(nèi)存。此外,MapReduce作業(yè)的總輸入數(shù)據(jù)量為10GB,并且數(shù)據(jù)在內(nèi)存中和在磁盤中的數(shù)據(jù)結(jié)構(gòu)除了 R之外還包括每記錄16字節(jié)的管理開銷。當(dāng)利用根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法時(shí),可以計(jì)算得到Mc=Re =核數(shù)=2X4 = 8, Memory_Size = 1200MBX4/[ (8+8) = 300MB, Data_Buffer =300MBX84/(16+84) =252MB, Map_input_split_size = 252MBX3 = 756MB, Map 任務(wù)數(shù)量=10GB/756MB=13 個(gè),Reduce 輸入大小=10GB/3 = 3.33GB, Reduce 任務(wù)數(shù)量=3.33GB/(0.5 X 300MB) =23 個(gè)。
[0100]根據(jù)本發(fā)明實(shí)施例提供的上述方法,通過(guò)根據(jù)資源槽對(duì)應(yīng)的內(nèi)存大小,向占用該資源槽的任務(wù)分配與其內(nèi)存相匹配的輸入數(shù)據(jù),可以盡可能避免不必要的磁盤溢出,同時(shí)能夠?qū)?shù)進(jìn)行自動(dòng)優(yōu)化以充分利用各資源槽的核資源和內(nèi)存資源,并可以提高處理效率。此外,通過(guò)將總內(nèi)存除以(Mc+Rc)來(lái)求取Memory_Size并基于Memory_Size來(lái)確定切片大小,可以支持流水線的MapReduce操作。另外,即便在異構(gòu)網(wǎng)絡(luò)中,通過(guò)根據(jù)各資源槽自身的資源情況進(jìn)行按需分配,也可以避免不必要的磁盤溢出,同時(shí)提高處理效率并避免資源浪費(fèi)。
[0101]上面描述了根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的方法,接下來(lái)描述根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的裝置以及MapReduce架構(gòu)系統(tǒng)的結(jié)構(gòu)框圖。
[0102]如圖7所示,根據(jù)本發(fā)明實(shí)施例的用于MapReduce架構(gòu)中的資源管理的裝置700包括第一確定部件710、第二確定部件720、第三確定部件730和第一分配部件740。第一確定部件710可被配置為確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R。第二確定部件720可被配置為確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size。第三確定部件730可被配置為根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大小。第一分配部件740可被配置為將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
[0103]第一確定部件710、第二確定部件720、第三確定部件730和第一分配部件740的上述和/或其他操作和功能可以參考上述方法200的相關(guān)描述,為了避免重復(fù),在此不再贅述。
[0104]根據(jù)本發(fā)明實(shí)施例提供的上述裝置,通過(guò)預(yù)先估計(jì)出一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小,可以根據(jù)該內(nèi)存大小向占用該Map資源槽的Map任務(wù)分配相匹配的輸入切片大小,從而盡可能避免輸入切片大小和內(nèi)存大小不匹配而導(dǎo)致的多次磁盤溢出以及在該情況下造成的對(duì)磁盤的反復(fù)讀寫,因此能夠提高M(jìn)ap任務(wù)的處理效率,避免資源浪費(fèi)。
[0105]圖8中示出了用于MapReduce架構(gòu)中的資源管理的另一裝置800的結(jié)構(gòu)框圖。裝置800中的第一確定部件810、第二確定部件820、第三確定部件830和第一分配部件840分別與裝置700中的第一確定部件710、第二確定部件720、第三確定部件730和第一分配部件740基本相同。
[0106]根據(jù)本發(fā)明的實(shí)施例,第一確定部件810可以包括第一確定單元812和第二確定單元814中的至少一個(gè)。第一確定單元810可被配置為預(yù)先運(yùn)行一個(gè)或多個(gè)Map任務(wù),并根據(jù)運(yùn)行后得到的結(jié)果確定r和R。第二確定單元820可被配置為根據(jù)與歷史上運(yùn)行過(guò)的Map任務(wù)相關(guān)的日志信息,確定r和R。
[0107]根據(jù)本發(fā)明的一個(gè)實(shí)施例,第三確定部件830可以包括第三確定單元832和第四確定單元834。第三確定單元832可被配置為根據(jù)R、Map輸出結(jié)果中一個(gè)記錄所對(duì)應(yīng)的管理開銷和Memory_Size,確定Memory_Size中用于存儲(chǔ)除所述管理開銷之外的數(shù)據(jù)的內(nèi)存大小Data_Buffer。第四確定單元834可被配置為根據(jù)Data_Buffer和r,確定適合Map任務(wù)的輸入切片大小。
[0108]根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,第二確定部件820可被配置為根據(jù)用于并行執(zhí)行Map任務(wù)的資源槽總數(shù)和用于并行執(zhí)行Map任務(wù)的總內(nèi)存,確定Memory_S i z e。
[0109]根據(jù)本發(fā)明的一個(gè)實(shí)施例,裝置800還可以包括第四確定部件850。第四確定部件850可被配置為根據(jù)MapReduce作業(yè)的總輸入數(shù)據(jù)量和輸入切片大小,確定MapReduce作業(yè)的Map任務(wù)數(shù)量。
[0110]根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,第二確定部件820可被配置為響應(yīng)于一個(gè)Map資源槽空閑,確定該Map資源槽對(duì)應(yīng)的內(nèi)存大小,作為Memory_Size。
[0111]根據(jù)本發(fā)明的一個(gè)實(shí)施例,裝置800還可以包括第五確定部件860、第六確定部件870和第七確定部件880。第五確定部件860可被配置為根據(jù)r和MapRuduce作業(yè)的總輸入數(shù)據(jù)量,確定MapReduce作業(yè)的Map輸出結(jié)果的總數(shù)據(jù)量。第六確定部件870可被配置為確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。第七確定部件880可被配置為根據(jù)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小和Map輸出結(jié)果的總數(shù)據(jù)量,確定MapReduce作業(yè)的Reduce任務(wù)數(shù)量。
[0112]根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,第六確定部件870可被配置為根據(jù)用于并行執(zhí)行Reduce任務(wù)的資源槽總數(shù)、用于并行執(zhí)行Reduce任務(wù)的總內(nèi)存以及小于I的預(yù)定系數(shù),確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。
[0113]根據(jù)本發(fā)明的一個(gè)實(shí)施例,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,第六確定部件870可被配置為針對(duì)異構(gòu)網(wǎng)絡(luò)中執(zhí)行MapReduce作業(yè)的各Reduce資源槽中的每一個(gè),根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小和小于I的預(yù)定系數(shù),確定該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。并且,第七確定部件880可被配置為根據(jù)各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小的公約數(shù)和Map輸出結(jié)果的總數(shù)據(jù)量,確定MapReduce作業(yè)的Reduce任務(wù)數(shù)量。在該情況下,裝置800還可以包括第二分配部件890。第二分配部件890可被配置為響應(yīng)于一個(gè)Reduce資源槽空閑,根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的內(nèi)存大小和所述公約數(shù),將具有如下個(gè)數(shù)的Reduce任務(wù)分配給占用該Reduce資源槽的Reduce任務(wù),所述個(gè)數(shù)等于該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小相對(duì)于所述公約數(shù)的倍數(shù)。
[0114]根據(jù)本發(fā)明的實(shí)施例,所述公約數(shù)可以是100MB或最大公約數(shù)。
[0115]根據(jù)本發(fā)明的實(shí)施例,上述預(yù)定系數(shù)可以是0.5。
[0116]根據(jù)本發(fā)明的一個(gè)實(shí)施例,裝置800還可以包括控制部件895??刂撇考?95可被配置為響應(yīng)于占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作完成,開始還未占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作。
[0117]第一確定單元812、第二確定單元814、第二確定部件820、第三確定單元832、第四確定單元834、第四確定部件850、第五確定部件860、第六確定部件870、第七確定部件880、第二分配部件890和控制部件895的上述和/或其它操作和功能可以參考上述方法200、300,400和600以及圖5中的相關(guān)描述,為了避免重復(fù),在此不再贅述。
[0118]根據(jù)本發(fā)明實(shí)施例提供的上述裝置,通過(guò)第四確定部件、第五確定部件和第六確定部件,可以進(jìn)一步避免在Reduce操作中出現(xiàn)磁盤溢出,從而進(jìn)一步提高處理效率。通過(guò)控制部件,可以減少執(zhí)行所有Reduce任務(wù)的延時(shí),從而還能進(jìn)一步提高處理效率。此外,通過(guò)根據(jù)資源槽對(duì)應(yīng)的內(nèi)存大小,向占用該資源槽的任務(wù)分配與其內(nèi)存相匹配的輸入數(shù)據(jù),可以盡可能避免不必要的磁盤溢出,同時(shí)能夠?qū)?shù)進(jìn)行自動(dòng)優(yōu)化以充分利用各資源槽的核資源和內(nèi)存資源,并可以提高處理效率。此外,利用本發(fā)明實(shí)施例提供的裝置,還可以支持流水線的MapReduce操作。并且,即便在異構(gòu)網(wǎng)絡(luò)中,通過(guò)根據(jù)各資源槽自身的資源情況進(jìn)行按需分配,也可以避免不必要的磁盤溢出,同時(shí)提高處理效率并避免資源浪費(fèi)。
[0119]上述的裝置700和800可以被實(shí)現(xiàn)為單獨(dú)的軟件包或插件等,也可以被部分或全部集成到MapReduce架構(gòu)。
[0120]圖9中示出的MapReduce架構(gòu)系統(tǒng)900除了可以包括現(xiàn)有的部件之外,還可以包括用于資源管理的裝置910。裝置910可以是上述的裝置700或800。
[0121]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
[0122]以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說(shuō)明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說(shuō)明的各實(shí)施例的范圍和精神的情況下,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō)許多修改和變更都是顯而易見的。本文中所用術(shù)語(yǔ)的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌?chǎng)中的技術(shù)的技術(shù)改進(jìn),或者使本【技術(shù)領(lǐng)域】的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。
【權(quán)利要求】
1.一種用于MapReduce架構(gòu)中的資源管理的方法,包括: 確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R ; 確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size ; 根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大?。灰约? 將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述確定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R包括如下至少之一: 預(yù)先運(yùn)行一個(gè)或多個(gè)Map任務(wù),并根據(jù)運(yùn)行后得到的結(jié)果確定r和R ; 根據(jù)與歷史上運(yùn)行過(guò)的Map任務(wù)相關(guān)的日志信息,確定r和R。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述根據(jù)所確定的r、R和Memory_Size、確定適合該Map任務(wù)的輸入切片大小包括: 根據(jù)R、Map輸出結(jié)果中一個(gè)記錄所對(duì)應(yīng)的管理開銷和Memory_Size,確定Memory_Size中用于存儲(chǔ)除所述管理開銷之外的數(shù)據(jù)的內(nèi)存大小Data_Buffer ;以及 根據(jù)Data_Buffer和r,確定適合該Map任務(wù)的輸入切片大小。
4.根據(jù)權(quán)利要求1所述的方法,其中,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,所述確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size包括: 根據(jù)用于并行執(zhí)行Map任務(wù)的資源槽總數(shù)和用于并行執(zhí)行Map任務(wù)的總內(nèi)存,確定Memory_Size。
5.根據(jù)權(quán)利要求4所述的方法,其中,還包括: 根據(jù)所述MapReduce作業(yè)的總輸入數(shù)據(jù)量和所述輸入切片大小,確定所述MapReduce作業(yè)的Map任務(wù)數(shù)量。
6.根據(jù)權(quán)利要求1所述的方法,其中,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,所述確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size包括: 響應(yīng)于一個(gè)Map資源槽空閑,確定該Map資源槽對(duì)應(yīng)的內(nèi)存大小,作為Memory_Size。
7.根據(jù)權(quán)利要求1所述的方法,還包括: 根據(jù)r和所述MapRuduce作業(yè)的總輸入數(shù)據(jù)量,確定所述MapReduce作業(yè)的Map輸出結(jié)果的總數(shù)據(jù)量; 確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大??;以及 根據(jù)所述存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小和所述Map輸出結(jié)果的總數(shù)據(jù)量,確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量。
8.根據(jù)權(quán)利要求7所述的方法,其中,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,所述確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小包括: 根據(jù)用于并行執(zhí)行Reduce任務(wù)的資源槽總數(shù)、用于并行執(zhí)行Reduce任務(wù)的總內(nèi)存以及小于I的預(yù)定系數(shù),確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。
9.根據(jù)權(quán)利要求7所述的方法,其中,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,所述確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小包括:針對(duì)異構(gòu)網(wǎng)絡(luò)中執(zhí)行所述MapReduce作業(yè)的各Reduce資源槽中的每一個(gè),根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小和小于I的預(yù)定系數(shù),確定該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小, 以及,所述根據(jù)所述存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小和所述Map輸出結(jié)果的總數(shù)據(jù)量確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量包括: 根據(jù)所述各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小的公約數(shù)和所述Map輸出結(jié)果的總數(shù)據(jù)量,確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量,以及,在確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量之后,所述方法還包括: 響應(yīng)于一個(gè)Reduce資源槽空閑,根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的內(nèi)存大小和所述公約數(shù),將具有如下個(gè)數(shù)的Reduce任務(wù)分配給占用該Reduce資源槽的Reduce任務(wù),所述個(gè)數(shù)等于該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小相對(duì)于所述公約數(shù)的倍數(shù)。
10.根據(jù)權(quán)利要求1所述的方法,還包括: 響應(yīng)于占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作完成,開始還未占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作。
11.一種用于MapReduce架構(gòu)中的資源管理的裝置,包括: 第一確定部件,被配置為確 定Map任務(wù)的輸入數(shù)據(jù)量和Map任務(wù)的輸出數(shù)據(jù)量之比r以及Map輸出結(jié)果中記錄的平均大小R ; 第二確定部件,被配置為確定一個(gè)Map資源槽對(duì)應(yīng)的能夠分配給Map任務(wù)的內(nèi)存大小Memory_Size ; 第三確定部件,被配置為根據(jù)所確定的r、R和Memory_Size,確定適合該Map任務(wù)的輸入切片大小;以及 第一分配部件,被配置為將待處理的MapReduce作業(yè)中具有該輸入切片大小的輸入分片分配給占用該Map資源槽的Map任務(wù)。
12.根據(jù)權(quán)利要求11所述的裝置,其中,所述第一確定部件包括如下至少之一: 第一確定單元,被配置為預(yù)先運(yùn)行一個(gè)或多個(gè)Map任務(wù),并根據(jù)運(yùn)行后得到的結(jié)果確定r和R ; 第二確定單元,被配置為根據(jù)與歷史上運(yùn)行過(guò)的Map任務(wù)相關(guān)的日志信息,確定r和R。
13.根據(jù)權(quán)利要求11所述的裝置,其中,所述第三確定部件包括: 第三確定單元,被配置為根據(jù)R、Map輸出結(jié)果中一個(gè)記錄所對(duì)應(yīng)的管理開銷和Memory_Size,確定Memory_Size中用于存儲(chǔ)除所述管理開銷之外的數(shù)據(jù)的內(nèi)存大小Data_Buffer ;以及 第四確定單元,被配置為根據(jù)Data_Buffer和r,確定適合該Map任務(wù)的輸入切片大小。
14.根據(jù)權(quán)利要求11所述的裝置,其中,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,所述第二確定部件被配置為根據(jù)用于并行執(zhí)行Map任務(wù)的資源槽總數(shù)和用于并行執(zhí)行Map任務(wù)的總內(nèi)存,確定Memory_Size。
15.根據(jù)權(quán)利要求14所述的裝置,其中,還包括: 第四確定部件,被配置為根據(jù)所述MapReduce作業(yè)的總輸入數(shù)據(jù)量和所述輸入切片大小,確定所述MapReduce作業(yè)的Map任務(wù)數(shù)量。
16.根據(jù)權(quán)利要求11所述的裝置,其中,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,所述第二確定部件被配置為響應(yīng)于一個(gè)Map資源槽空閑,確定該Map資源槽對(duì)應(yīng)的內(nèi)存大小,作為 Memory_Size。
17.根據(jù)權(quán)利要求11所述的裝置,還包括: 第五確定部件,被配置為根據(jù)r和所述MapRuduce作業(yè)的總輸入數(shù)據(jù)量,確定所述MapReduce作業(yè)的Map輸出結(jié)果的總數(shù)據(jù)量; 第六確定部件,被配置為確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大??;以及 第七確定部件,被配置為根據(jù)所述存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小和所述Map輸出結(jié)果的總數(shù)據(jù)量,確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量。
18.根據(jù)權(quán)利要求17所述的裝置,其中,在MapReduce架構(gòu)用于同構(gòu)網(wǎng)絡(luò)的情況下,所述第六確定部件被配置為根據(jù)用于并行執(zhí)行Reduce任務(wù)的資源槽總數(shù)、用于并行執(zhí)行Reduce任務(wù)的總內(nèi)存以及小于I的預(yù)定系數(shù),確定一個(gè)Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小。
19.根據(jù)權(quán)利要求17所述的裝置,其中,在MapReduce架構(gòu)用于異構(gòu)網(wǎng)絡(luò)的情況下,所述第六確定部件被配置為針對(duì)異構(gòu)網(wǎng)絡(luò)中執(zhí)行所述MapReduce作業(yè)的各Reduce資源槽中的每一個(gè),根據(jù)該Reduce 資源槽對(duì)應(yīng)的能夠分配給Reduce任務(wù)的內(nèi)存大小和小于I的預(yù)定系數(shù),確定該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小, 以及,所述第七確定部件被配置為根據(jù)所述各Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小的公約數(shù)和所述Map輸出結(jié)果的總數(shù)據(jù)量,確定所述MapReduce作業(yè)的Reduce任務(wù)數(shù)量, 以及,所述裝置還包括: 第二分配部件,被配置為響應(yīng)于一個(gè)Reduce資源槽空閑,根據(jù)該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的內(nèi)存大小和所述公約數(shù),將具有如下個(gè)數(shù)的Reduce任務(wù)分配給占用該Reduce資源槽的Reduce任務(wù),所述個(gè)數(shù)等于該Reduce資源槽對(duì)應(yīng)的能夠分配來(lái)存儲(chǔ)Reduce任務(wù)的輸入數(shù)據(jù)的內(nèi)存大小相對(duì)于所述公約數(shù)的倍數(shù)。
20.根據(jù)權(quán)利要求11所述的裝置,還包括: 控制部件,被配置為響應(yīng)于占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作完成,開始還未占用Reduce資源槽的Reduce任務(wù)的讀取Map輸出結(jié)果的操作。
21.—種MapReduce架構(gòu)系統(tǒng),包括: 根據(jù)權(quán)利要求11 - 20中任一項(xiàng)所述的裝置。
【文檔編號(hào)】G06F9/50GK103970520SQ201310037826
【公開日】2014年8月6日 申請(qǐng)日期:2013年1月31日 優(yōu)先權(quán)日:2013年1月31日
【發(fā)明者】史巨偉, 李立, 鄒嘉, 于琦 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1