專利名稱:一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及云計(jì)算技術(shù)領(lǐng)域,具體涉及一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng)。
背景技術(shù):
在云計(jì)算領(lǐng)域,當(dāng)前主流的計(jì)算模型是谷歌公司提出的MapReduce模型以及對(duì)其改進(jìn)形成的模型。對(duì)一般用戶來(lái)說(shuō),MapReduce模型是一種編程范例,按照MapReduce編程范例寫的程序可以并行運(yùn)行在集群中的多個(gè)計(jì)算機(jī)節(jié)點(diǎn)上;對(duì)云服務(wù)提供商來(lái)說(shuō),MapReduce是一種用來(lái)構(gòu)建云計(jì)算環(huán)境的架構(gòu),用MapReduce來(lái)組織多個(gè)計(jì)算機(jī)節(jié)點(diǎn)來(lái)組成大型集群運(yùn)行MapReduce程序。MapReduce把整個(gè)作業(yè)按數(shù)據(jù)量大小劃分成多個(gè)子任務(wù),上述多個(gè)子任務(wù)在集群中的計(jì)算機(jī)節(jié)點(diǎn)中并行運(yùn)行。在MapReduce模型中,一個(gè)MapReduce作業(yè)(Job)被劃分成多個(gè)任務(wù)(Task),并分配到集群中的節(jié)點(diǎn)上進(jìn)行處理,劃分方法由用戶指定,作業(yè)分為映射(Map)階段和化簡(jiǎn)(Reduce)階段進(jìn)行處理,兩個(gè)階段輸入和輸出都為Key/Value形式的數(shù)據(jù)模型,每個(gè)節(jié)點(diǎn)會(huì)周期性的把完成的工作、狀態(tài)和更新報(bào)告發(fā)送給主節(jié)點(diǎn)。在調(diào)用MapReduce后,用戶程序處于等待狀態(tài)。一個(gè)MapReduce的實(shí)際運(yùn)行流程如下:Tl.分布式計(jì)算系統(tǒng)集群中的節(jié)點(diǎn)設(shè)置為主節(jié)點(diǎn)和工作節(jié)點(diǎn),主節(jié)點(diǎn)首先調(diào)用自定義的映射函數(shù)(Map函數(shù)),將待處理的輸入文件分成M個(gè)數(shù)據(jù)片段,每個(gè)數(shù)據(jù)片段的大小一般從16MB到64MB (用戶可以控制每個(gè)數(shù)據(jù)片段的大小),然后,主節(jié)點(diǎn)將MapReduce作業(yè)(Job)劃分成多個(gè)子任務(wù),并將多個(gè)子任務(wù)的副本復(fù)制到工作節(jié)點(diǎn)上;T2.工作節(jié)點(diǎn)空閑時(shí)會(huì)向主節(jié)點(diǎn)發(fā)送該節(jié)點(diǎn)處于空閑狀態(tài)信息,主節(jié)點(diǎn)根據(jù)空閑節(jié)點(diǎn)空閑狀態(tài)負(fù)責(zé)給該空閑工作節(jié)點(diǎn)分配任務(wù),主節(jié)點(diǎn)在分配任務(wù)之前,首先根據(jù)數(shù)據(jù)片段的數(shù)量M得到M個(gè)Map子任務(wù)和R個(gè)Reduce子任務(wù),然后,主節(jié)點(diǎn)根據(jù)空閑的工作節(jié)點(diǎn)的請(qǐng)求將所有Map子任務(wù)和所有Reduce子任務(wù)分配給空閑的工作節(jié)點(diǎn),直到所有Map子任務(wù)和所有Reduce子任務(wù)都被分配完;T3.被分配了 Map子任務(wù)的工作節(jié)點(diǎn)從主節(jié)點(diǎn)上讀取對(duì)應(yīng)的一個(gè)輸入數(shù)據(jù)片段,從輸入的數(shù)據(jù)片段中提取出關(guān)于key和value的初始鍵值對(duì),然后把所述初始鍵值對(duì)傳遞給用戶自定義的映射函數(shù)(Map函數(shù)),由Map函數(shù)生成并輸出中間鍵值對(duì),并存儲(chǔ)在該工作節(jié)點(diǎn)的本地磁盤中中;T4.將該工作節(jié)點(diǎn)的本地磁盤中的中間鍵值對(duì)分成R個(gè)區(qū)域,所謂將中間鍵值對(duì)分成R個(gè)區(qū)域,相當(dāng)于將所述中間鍵值對(duì)封裝成R個(gè)任務(wù)包,以便于Reduce進(jìn)行處理,一個(gè)Reduce子任務(wù)用來(lái)處理一個(gè)區(qū)域中的所述中間鍵值對(duì),將中間鍵值對(duì)在本地磁盤上的存儲(chǔ)位置數(shù)據(jù)回傳給主節(jié)點(diǎn),由主節(jié)點(diǎn)負(fù)責(zé)把這些存儲(chǔ)位置數(shù)據(jù)再傳送給處理Reduce子任務(wù)的工作節(jié)點(diǎn);T5.當(dāng)處理Reduce子任務(wù)的工作節(jié)點(diǎn)接收到Master發(fā)來(lái)的存儲(chǔ)位置數(shù)據(jù)后,通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議(Remote Procedure Call Protocol,縮寫為RPC)從處理Map的工作節(jié)點(diǎn)的本地磁盤上讀取中間鍵值對(duì),當(dāng)處理Reduce子任務(wù)的工作節(jié)點(diǎn)讀取了所有的中間鍵值對(duì)后,對(duì)key進(jìn)行排序,使得具有相同key值的數(shù)據(jù)排列在一起;T6.處理Reduce子任務(wù)的工作節(jié)點(diǎn)對(duì)排序后的中間鍵值對(duì)進(jìn)行進(jìn)一步處理,處理Reduce子任務(wù)的工作節(jié)點(diǎn)將每個(gè)key值和與它相關(guān)的value值集合傳遞給用戶自定義的Reduce函數(shù)得到輸出結(jié)果,屬于一個(gè)分區(qū)的多個(gè)鍵值對(duì)對(duì)應(yīng)的多個(gè)輸出結(jié)果形成輸出文件并存儲(chǔ)在相應(yīng)的工作節(jié)點(diǎn)上;T7.當(dāng)所有的Map子任務(wù)和Reduce子任務(wù)都完成之后,主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。其流程圖如圖1所示。從上述對(duì)MapReduce計(jì)算模型和運(yùn)行實(shí)例的描述可以看出,在它的計(jì)算流程中,特別是最后對(duì)結(jié)果進(jìn)行匯總計(jì)算的Reduce環(huán)節(jié),要對(duì)幾十或者上百甚至上千節(jié)點(diǎn)的計(jì)算結(jié)果進(jìn)行匯總計(jì)算,計(jì)算量很大,而這個(gè)壓力集中在主節(jié)點(diǎn)上,而主節(jié)點(diǎn)同時(shí)還要承擔(dān)繁重的任務(wù)分發(fā)工作,容易形成系統(tǒng)瓶頸,也帶來(lái)系統(tǒng)的單點(diǎn)失效風(fēng)險(xiǎn)性較大。
發(fā)明內(nèi)容
本發(fā)明所要解決的一個(gè)技術(shù)問(wèn)題是現(xiàn)有技術(shù)的MapReduce計(jì)算模型中,任務(wù)分發(fā)和最后結(jié)果匯總時(shí)的計(jì)算量集中在主節(jié)點(diǎn)上,主節(jié)點(diǎn)壓力很大,易形成系統(tǒng)瓶頸,也容易帶來(lái)系統(tǒng)單點(diǎn)失效的風(fēng)險(xiǎn)性較大的技術(shù)問(wèn)題,從而提供一種能夠分散主節(jié)點(diǎn)計(jì)算壓力的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng)。為解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案如下:一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法,所述分布式計(jì)算系統(tǒng)的集群中的節(jié)點(diǎn)包括一個(gè)主節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn),其中所述主節(jié)點(diǎn)用于為所述多個(gè)工作節(jié)點(diǎn)進(jìn)行任務(wù)調(diào)度,包括如下步驟:SI,用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)按照用戶程序邏輯設(shè)定一個(gè)或多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上;S2,集群中的工作節(jié)點(diǎn)將空閑狀態(tài)周期性地發(fā)送給所述主節(jié)點(diǎn),主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中,其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的一個(gè)目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定;S3,所述工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則執(zhí)行步聚S4 ;若否,則返回執(zhí)行步驟S3 ;S4,標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域;S5,最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果;
S6,主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。在所述步驟
S4中,還包括步驟S401:S401,判斷所述中間鍵值對(duì)的數(shù)量是否大于所述分布式計(jì)算系統(tǒng)配置的用于執(zhí)行任務(wù)的各工作節(jié)點(diǎn)內(nèi)存空間限額,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤空間進(jìn)行排序。本發(fā)明還涉及一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度系統(tǒng),包括啟動(dòng)裝置、分配裝置、判斷裝置、分區(qū)裝置、獲取裝置和喚醒裝置;其中,所述啟動(dòng)裝置,用于用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)設(shè)定多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上;所述分配裝置,主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中,其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的Iv目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定;所述判斷裝置,用于工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則進(jìn)入分區(qū)裝置,標(biāo)識(shí)最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn);若否,則主節(jié)點(diǎn)繼續(xù)等待工作節(jié)點(diǎn)完成Map子任務(wù),并發(fā)出處理完成Map子任務(wù)的報(bào)告;所述分區(qū)裝置,用于標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域;所述獲取裝置,用于最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果;所述喚醒裝置,用于主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。所述分區(qū)裝置還包括判斷子裝置;其中,所述判斷子裝置,用于判斷所述中間鍵值對(duì)的數(shù)量是否大于系統(tǒng)配置的任務(wù)內(nèi)存空間限額,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤空間進(jìn)行排序。本發(fā)明的上述技術(shù)方案相比現(xiàn)有技術(shù)具有以下優(yōu)點(diǎn):本發(fā)明所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng),在MapReduce計(jì)算模型中,將輸入文件分成多個(gè)數(shù)據(jù)段,在分布式計(jì)算系統(tǒng)中,主節(jié)點(diǎn)在各個(gè)工作節(jié)點(diǎn)上創(chuàng)建多個(gè)Map子任務(wù)和多個(gè)Reduce子任務(wù)的副本,將數(shù)據(jù)段分配給各個(gè)工作節(jié)點(diǎn),使所述多個(gè)工作節(jié)點(diǎn)對(duì)所述多個(gè)數(shù)據(jù)段進(jìn)行處理,以提高文件處理的效率;在多個(gè)數(shù)據(jù)段處理完成后,將不同數(shù)據(jù)段的處理結(jié)果再進(jìn)行化簡(jiǎn),本發(fā)明中,負(fù)責(zé)分配任務(wù)的主節(jié)點(diǎn)僅負(fù)責(zé)分配任務(wù),最后匯總計(jì)算處理結(jié)果的工作由其他工作節(jié)點(diǎn)來(lái)完成,從而減輕在化簡(jiǎn)階段的系統(tǒng)瓶頸問(wèn)題,并且通過(guò)節(jié)點(diǎn)間通信,實(shí)現(xiàn)MapReduce流程中各子節(jié)點(diǎn)的自管理。本發(fā)明所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法與系統(tǒng)中,分布式計(jì)算系統(tǒng)集群中主節(jié)點(diǎn)所獲取的輸入文件可能比較大,各工作節(jié)點(diǎn)運(yùn)算量較大,在公共區(qū)域?qū)⒅虚g鍵值對(duì)排序時(shí),僅用內(nèi)存空間排序,可能無(wú)法執(zhí)行運(yùn)算,因?yàn)楸景l(fā)明方法中,在判斷數(shù)據(jù)量較大時(shí),使用外部空間排序,以保證各工作節(jié)點(diǎn)能夠正常的執(zhí)行任務(wù)。本發(fā)明所述的的任務(wù)調(diào)度方法與系統(tǒng),所述分布式計(jì)算系統(tǒng)設(shè)置有公共區(qū)域,集群中的各節(jié)點(diǎn)均可訪問(wèn)所述公共區(qū)域,以獲取各節(jié)點(diǎn)較常用的數(shù)據(jù),減輕由單一節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)造成單一節(jié)點(diǎn)負(fù)載過(guò)重而影響系統(tǒng)工作效率。
為了使本發(fā)明的內(nèi)容更容易被清楚的理解,下面根據(jù)本發(fā)明的具體實(shí)施例并結(jié)合附圖,對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明,其中:圖1為現(xiàn)有技術(shù)中的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法的一個(gè)MapReduce實(shí)際運(yùn)行流程圖;圖2為本發(fā)明的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法的實(shí)施例一的流程圖;圖3為本發(fā)明的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度系統(tǒng)的實(shí)施例二的結(jié)構(gòu)示意圖。
具體實(shí)施例方式實(shí)施例一:如圖2所示,一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法,所述分布式計(jì)算系統(tǒng)集群中的節(jié)點(diǎn)包括一個(gè)主節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn),其中所述主節(jié)點(diǎn)用于為所述多個(gè)工作節(jié)點(diǎn)進(jìn)行任務(wù)調(diào)度,具體包括如下步驟:SI,用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)基于MapReduce模型根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)按照用戶程序邏輯設(shè)定一個(gè)或多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上。所述用戶程序在調(diào)用MapReduce程序時(shí),將所述Reduce子任務(wù)的數(shù)目的確定條件傳遞給所述MapReduce程序,所述MapReduce程序在執(zhí)行時(shí)根據(jù)用戶程序所設(shè)定的業(yè)務(wù)邏輯來(lái)設(shè)定Reduce子任務(wù)的數(shù)目,通常情況下,所述Reduce子任務(wù)的數(shù)目小于所述Map子任務(wù)的數(shù)目。在本實(shí)施例中,所述輸入文件為類似結(jié)構(gòu)化數(shù)據(jù)形式的文本文件,所述輸入文件以二維表格形式輸入。所述輸入文件分成M個(gè)數(shù)據(jù)段,一個(gè)數(shù)據(jù)段即為二維表格的若干行,根據(jù)數(shù)據(jù)段的數(shù)目生成多個(gè)Map子任務(wù),所述Map子任務(wù)的數(shù)量也是M個(gè),與數(shù)據(jù)段的數(shù)目保持一致,同時(shí),所述主節(jié)點(diǎn)按照用戶程序邏輯設(shè)定一個(gè)或多個(gè)Reduce子任務(wù),所述Reduce子任務(wù)數(shù)目為R個(gè),R的數(shù)值不能太大或太小,約為1/3M-1/2M個(gè),M為大于等于2的自然數(shù),R為大于等于2的自然數(shù)。在本發(fā)明的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法中,所述Map子任務(wù)和所述Reduce子任務(wù)均由多組業(yè)務(wù)邏輯組成。S2,集群中的工作節(jié)點(diǎn)將空閑狀態(tài)周期性地發(fā)送給所述主節(jié)點(diǎn),主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中。其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的一個(gè)目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定,在完成對(duì)所述MapReduce程序的調(diào)用后,集群中各個(gè)節(jié)點(diǎn)可以訪問(wèn)所述公共區(qū)域來(lái)獲取數(shù)據(jù)。本領(lǐng)域技術(shù)人員應(yīng)該可以理解,所述輸入文件為類似結(jié)構(gòu)化數(shù)據(jù)形式的文本文件,所述輸入文件以二維表格形式輸入。在讀取所述數(shù)據(jù)段時(shí),根據(jù)用戶程序設(shè)定的業(yè)務(wù)邏輯,默認(rèn)每一行的第一個(gè)字段為Key,第二個(gè)字段為Value。從而所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),所述Map子任務(wù)和所述Reduce子任務(wù)的輸入、輸出均為關(guān)于Key和Va Iue的鍵值對(duì)形式的數(shù)據(jù)。S3,所述工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則執(zhí)行步聚S4 ;若否,則返回執(zhí)行步驟S3。在本實(shí)施例中,所述工作節(jié)點(diǎn)每完成一個(gè)Map子任務(wù),就向所述主節(jié)點(diǎn)發(fā)送一次處理完成Map子任務(wù)的報(bào)告,作為一種可替代方案,由于一個(gè)工作節(jié)點(diǎn)可能被分配多個(gè)Map子任務(wù),也可以待該工作節(jié)點(diǎn)處理完成被分配的所有Map子任務(wù)后,再向主節(jié)點(diǎn)發(fā)送處理完成Map子任務(wù)的報(bào)告。主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,以便確定最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)。S4,標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,判斷所述中間鍵值對(duì)的數(shù)量是否大于所述分布式計(jì)算系統(tǒng)配置的用于執(zhí)行任務(wù)的各工作節(jié)點(diǎn)內(nèi)存空間限額,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤空間進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域。將多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),即將所述中間鍵值對(duì)分成多個(gè)任務(wù)包,以供所述Reduce子任務(wù)對(duì)其進(jìn)行處理。所述區(qū)的數(shù)目與所述Reduce子任務(wù)的數(shù)目相一致,在本實(shí)施例中都為R個(gè),一個(gè)Reduce子任務(wù)對(duì)應(yīng)一個(gè)區(qū)。S5,最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果。在現(xiàn)有技術(shù)中,由主節(jié)點(diǎn)負(fù)責(zé)分配任務(wù),并對(duì)排序后的中間鍵值對(duì)進(jìn)行處理,使得主節(jié)點(diǎn)的工作量過(guò)大,容易造成系統(tǒng)瓶頸,在本實(shí)施例中,由主節(jié)點(diǎn)負(fù)責(zé)分配任務(wù),由所述最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)對(duì)所述公共區(qū)域的排序后的中間鍵值對(duì)進(jìn)行處理,減輕了所述主節(jié)點(diǎn)的工作量,減小了發(fā)生系統(tǒng)瓶頸的風(fēng)險(xiǎn)。S6,主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。用戶程序完成一次對(duì)MapReduce的調(diào)用后,根據(jù)主節(jié)點(diǎn)的喚醒請(qǐng)求,返回用戶程序,繼續(xù)執(zhí)行用戶程序。所述用戶程序可以在其下面程序執(zhí)行過(guò)程中,隨時(shí)調(diào)用公共區(qū)域中的最終結(jié)果。本發(fā)明所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法,在用戶程序執(zhí)行過(guò)程中,調(diào)用MapReduce計(jì)算模型,首先將輸入文件分成多個(gè)數(shù)據(jù)段,在分布式計(jì)算系統(tǒng)主節(jié)點(diǎn)在各個(gè)工作節(jié)點(diǎn)上創(chuàng)建多個(gè)Map子任務(wù)和Reduce子任務(wù)的副本,將所述數(shù)據(jù)段分配給各個(gè)工作節(jié)點(diǎn),使所述多個(gè)節(jié)點(diǎn)對(duì)所述多個(gè)數(shù)據(jù)段進(jìn)行處理,以提高文件處理的效率;本發(fā)明中,負(fù)責(zé)分配任務(wù)的主節(jié)點(diǎn)僅負(fù)責(zé)分配任務(wù),最后匯總計(jì)算處理結(jié)果的工作由最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)來(lái)完成,從而減輕在化簡(jiǎn)階段的系統(tǒng)瓶頸問(wèn)題。實(shí)施例二:如圖3所示,基于同一發(fā)明構(gòu)思,本發(fā)明還提供一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度系統(tǒng),包括啟動(dòng)裝置Q1、分配裝置Q2、判斷裝置Q3、分區(qū)裝置Q4、獲取裝置Q5和喚醒裝置Q6 ;其中,所述啟動(dòng)裝置Q1,用于用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)設(shè)定多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上;所述分配裝置Q2,主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中,其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的Iv目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定;所述判斷裝置Q3,用于工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則進(jìn)入分區(qū)裝置Q4,標(biāo)識(shí)最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn);若否,則主節(jié)點(diǎn)繼續(xù)等待工作節(jié)點(diǎn)完成Map子任務(wù),并發(fā)出處理完成Map子任務(wù)的報(bào)告;所述分區(qū)裝置Q4,用于標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域;所述獲取裝置Q5,用于最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果;
所述喚醒裝置Q6,用于主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。所述分區(qū)裝置Q4還包括判斷子裝置Q7 ;其中,所述判斷子裝置Q7,用于判斷所述中間鍵值對(duì)的數(shù)量是否為較大,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤空間進(jìn)行排序顯然,上述實(shí)施例僅僅是為清楚地說(shuō)明所作的舉例,而并非對(duì)實(shí)施方式的限定。對(duì)于所屬領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在上述說(shuō)明的基礎(chǔ)上還可以做出其它不同形式的變化或變動(dòng)。這里無(wú)需也無(wú)法對(duì)所有的實(shí)施方式予以窮舉。而由此所引伸出的顯而易見(jiàn)的變化或變動(dòng)仍處于本發(fā)明創(chuàng)造的保護(hù)范圍之中。
權(quán)利要求
1.一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法,所述分布式計(jì)算系統(tǒng)的集群中的節(jié)點(diǎn)包括一個(gè)主節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn),其中所述主節(jié)點(diǎn)用于為所述多個(gè)工作節(jié)點(diǎn)進(jìn)行任務(wù)調(diào)度,其特征在于,包括如下步驟: SI,用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)按照用戶程序邏輯設(shè)定一個(gè)或多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上; S2,集群中的工作節(jié)點(diǎn)將空閑狀態(tài)周期性地發(fā)送給所述主節(jié)點(diǎn),主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中,其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的一個(gè)目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定; S3,所述工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則執(zhí)行步聚S4 ;若否,則返回執(zhí)行步驟S3; S4,標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域; S5,最后完成數(shù)據(jù) 段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果; S6,主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。
2.根據(jù)權(quán)利要求1所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法,其特征在于,在所述步驟S4中,還包括步驟S401: S401,判斷所述中間鍵值對(duì)的數(shù)量是否大于所述分布式計(jì)算系統(tǒng)配置的用于執(zhí)行任務(wù)的各工作節(jié)點(diǎn)的內(nèi)存空間限額,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤空間進(jìn)行排序。
3.一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度系統(tǒng),其特征在于,包括啟動(dòng)裝置、分配裝置、判斷裝置、分區(qū)裝置、獲取裝置和喚醒裝置;其中, 所述啟動(dòng)裝置,用于用戶程序啟動(dòng)MapReduce程序,同時(shí)用戶程序進(jìn)入休眠狀態(tài);主節(jié)點(diǎn)獲取輸入文件,主節(jié)點(diǎn)發(fā)出執(zhí)行處理輸入文件的請(qǐng)求,所述分布式計(jì)算系統(tǒng)對(duì)所述請(qǐng)求做出響應(yīng),并將所述輸入文件分成多個(gè)數(shù)據(jù)段,主節(jié)點(diǎn)根據(jù)所述數(shù)據(jù)段數(shù)目生成多個(gè)Map子任務(wù),并將所述Map子任務(wù)的副本復(fù)制到各個(gè)工作節(jié)點(diǎn)上,其中,每個(gè)所述Map子任務(wù)用于執(zhí)行處理一個(gè)所述數(shù)據(jù)段的請(qǐng)求;同時(shí),所述主節(jié)點(diǎn)設(shè)定多個(gè)Reduce子任務(wù),并將所述Reduce子任務(wù)的副本復(fù)制到所述各個(gè)工作節(jié)點(diǎn)上; 所述分配裝置,主節(jié)點(diǎn)根據(jù)所述工作節(jié)點(diǎn)的空閑狀態(tài)將所述數(shù)據(jù)段分配給所述工作節(jié)點(diǎn),直到所有數(shù)據(jù)段均分配完畢,所述工作節(jié)點(diǎn)從所述數(shù)據(jù)段中提取出關(guān)于Key和Value的初始鍵值對(duì),將所述初始鍵值對(duì)傳遞給Map子任務(wù),由所述Map子任務(wù)進(jìn)行處理,生成中間鍵值對(duì),輸出所述中間鍵值對(duì)至公共區(qū)域中,其中,所述公共區(qū)域?yàn)樗龇植际接?jì)算系統(tǒng)中的一個(gè)目錄,由所述用戶程序在啟動(dòng)MapReduce程序時(shí)指定; 所述判斷裝置,用于工作節(jié)點(diǎn)完成一個(gè)Map子任務(wù)后向所述主節(jié)點(diǎn)發(fā)出處理完成Map子任務(wù)的報(bào)告,主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是,則進(jìn)入分區(qū)裝置,標(biāo)識(shí)最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn);若否,則主節(jié)點(diǎn)繼續(xù)等待工作節(jié)點(diǎn)完成Map子任務(wù),并發(fā)出處理完成Map子任務(wù)的報(bào)告; 所述分區(qū)裝置,用于標(biāo)記最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn),將處于公共區(qū)域的多個(gè)所述中間鍵值對(duì)分成多個(gè)區(qū),調(diào)取Reduce子任務(wù),每個(gè)Reduce子任務(wù)對(duì)一個(gè)區(qū)中的中間鍵值按照Key進(jìn)行排序,并將排序后的中間鍵值對(duì)周期性地寫入所述分布式計(jì)算系統(tǒng)的公共區(qū)域; 所述獲取裝置,用于最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)獲取所述公共區(qū)域的中間鍵值對(duì),再次調(diào)取Reduce子任務(wù)對(duì)各個(gè)區(qū)的所述中間鍵值對(duì)進(jìn)行處理,并將處理后得到的結(jié)果存儲(chǔ)到所屬區(qū)作為最終結(jié)果; 所述喚醒裝置,用于主節(jié)點(diǎn)喚醒用戶程序,用戶程序結(jié)束對(duì)MapReduce的調(diào)用并返回。
4.根據(jù)權(quán)利要求3所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度系統(tǒng),其特征在于,所述分區(qū)裝置還包括判斷子裝置;其中, 所述判斷子裝置,用于判斷所述中間鍵值對(duì)的數(shù)量是否大于系統(tǒng)配置的任務(wù)內(nèi)存空間限額,若否,則對(duì)中間鍵值對(duì)的排序使用工作節(jié)點(diǎn)的內(nèi)存空間進(jìn)行排序;若是,則使用工作節(jié)點(diǎn)的除內(nèi)存外的本地磁盤 空間進(jìn)行排序。
全文摘要
本發(fā)明涉及一種分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng),其中所述方法包括如下步驟①將分布式計(jì)算系統(tǒng)集群中節(jié)點(diǎn)設(shè)置主節(jié)點(diǎn)和工作節(jié)點(diǎn);②主節(jié)點(diǎn)將輸入文件分成多個(gè)數(shù)據(jù)段;③主節(jié)點(diǎn)為工作節(jié)點(diǎn)分配數(shù)據(jù)段和任務(wù),主節(jié)點(diǎn)從中提取出初始鍵值對(duì)并處理生成中間鍵值對(duì),存儲(chǔ)至公共區(qū)域;④主節(jié)點(diǎn)判斷所有數(shù)據(jù)段的處理是否完成,若是則執(zhí)行⑤,若否則執(zhí)行③;⑤將中間鍵值對(duì)分成多個(gè)區(qū)并排序;⑥最后完成數(shù)據(jù)段處理的工作節(jié)點(diǎn)對(duì)中間鍵值對(duì)進(jìn)行處理,將最終結(jié)果存儲(chǔ)到所屬區(qū);⑦返回。本發(fā)明所述的分布式計(jì)算系統(tǒng)的任務(wù)調(diào)度方法及系統(tǒng),負(fù)責(zé)分配任務(wù)的主節(jié)點(diǎn)僅負(fù)責(zé)分配任務(wù),最后匯總計(jì)算處理結(jié)果由工作節(jié)點(diǎn)來(lái)完成,從而減輕在化簡(jiǎn)階段的系統(tǒng)瓶頸問(wèn)題。
文檔編號(hào)H04L29/08GK103078941SQ201210593388
公開(kāi)日2013年5月1日 申請(qǐng)日期2012年12月31日 優(yōu)先權(quán)日2012年12月31日
發(fā)明者岳洋, 鈕毅 申請(qǐng)人:中金數(shù)據(jù)系統(tǒng)有限公司