本發(fā)明涉及大數(shù)據(jù),特別涉及一種基于hadoop的數(shù)據(jù)處理方法。
背景技術(shù):
云計(jì)算通過(guò)互聯(lián)網(wǎng)將龐大的數(shù)據(jù)存儲(chǔ)和計(jì)算處理程序分布到集群系統(tǒng)的計(jì)算機(jī)中,并且提供相應(yīng)的應(yīng)用程序服務(wù)。用戶在對(duì)資源提交訪問(wèn)請(qǐng)求時(shí),系統(tǒng)能夠自動(dòng)地將請(qǐng)求切換到實(shí)際的存放資源的計(jì)算機(jī)和存儲(chǔ)系統(tǒng)。虛擬化技術(shù)的云計(jì)算平臺(tái)在海量數(shù)據(jù)處理方面取得了令人滿意的成果。但云計(jì)算將海量數(shù)據(jù)分布在大規(guī)模集群上進(jìn)行并行處理,由于目前主流云計(jì)算平臺(tái)底層采用虛擬化技術(shù),其上所有軟件和應(yīng)用均運(yùn)行在虛擬硬件之上,這種策略必然帶來(lái)一定程度上的性能降低。而且mapreduce內(nèi)部實(shí)現(xiàn)機(jī)制是采用先存儲(chǔ)數(shù)據(jù)再讀出轉(zhuǎn)發(fā)處理的策略,當(dāng)中間數(shù)據(jù)量變大、個(gè)數(shù)增多時(shí),這種模式必然產(chǎn)生大量的無(wú)用的磁盤i/o操作;如果數(shù)據(jù)在遠(yuǎn)端,這樣會(huì)增加網(wǎng)絡(luò)負(fù)載;如果數(shù)據(jù)在本地,則會(huì)受i/o瓶頸限制,從而降低了任務(wù)執(zhí)行的效率。
技術(shù)實(shí)現(xiàn)要素:
為解決上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明提出了一種基于hadoop的數(shù)據(jù)處理方法,包括:
使用異構(gòu)硬件架設(shè)云基礎(chǔ)設(shè)施服務(wù)層,基于多級(jí)容錯(cuò)的并行計(jì)算接口建立分布式計(jì)算架構(gòu)。
優(yōu)選地,所述基于hadoop的云計(jì)算平臺(tái)架構(gòu)包括異構(gòu)計(jì)算節(jié)點(diǎn)、基于并行計(jì)算接口的容錯(cuò)單元、監(jiān)控模塊、作業(yè)管理模塊、任務(wù)管理模塊、分布式數(shù)據(jù)庫(kù)和mapreduce計(jì)算框架;
所述作業(yè)管理模塊,用于保存作業(yè)隊(duì)列,管理作業(yè)的調(diào)度,監(jiān)控作業(yè)的執(zhí)行,支持遠(yuǎn)程作業(yè)提交以及結(jié)果返回;所述監(jiān)控模塊,用于管理可用主機(jī)列表,發(fā)現(xiàn)異常節(jié)點(diǎn)并根據(jù)負(fù)載情況對(duì)節(jié)點(diǎn)排序,首先選擇負(fù)載最小的節(jié)點(diǎn)執(zhí)行任務(wù);所述任務(wù)管理模塊用于任務(wù)劃分和分配調(diào)度,任務(wù)執(zhí)行,收集并返回結(jié)果。
優(yōu)選地,所述作業(yè)管理模塊中包含作業(yè)通信子模塊,根據(jù)用戶交互,實(shí)現(xiàn)作業(yè)提交與結(jié)果反饋;作業(yè)通信子模塊初始化后,依照用戶的設(shè)定,需要綁定的本地套接服務(wù)器地址以及作業(yè)管理子模塊的套接服務(wù)器遠(yuǎn)程地址,并創(chuàng)建兩個(gè)工作線程:等待線程:循環(huán)等待接收來(lái)自任務(wù)管理模塊反饋的作業(yè)結(jié)果;發(fā)送線程,一旦用戶提交了新作業(yè),基于作業(yè)管理子模塊的服務(wù)器地址,借助套接字把用戶輸入的作業(yè)打包發(fā)送給作業(yè)管理子模塊;作業(yè)管理子模塊等待作業(yè)通信子模塊提交給自己的作業(yè);創(chuàng)建兩個(gè)工作線程:解析線程,維護(hù)本地的套接服務(wù)器,得到作業(yè)通信子模塊遠(yuǎn)程提交的作業(yè),解析該信息并確認(rèn)該信息是否符合規(guī)則,將合格的作業(yè)綁定作業(yè)提交者的地址后放置到多優(yōu)先級(jí)作業(yè)隊(duì)列中,以待被調(diào)度執(zhí)行;掃描線程,循環(huán)掃描多優(yōu)先級(jí)作業(yè)隊(duì)列以確定隊(duì)列中是否有較高優(yōu)先級(jí)的作業(yè),若有較高優(yōu)先級(jí)的作業(yè)存在,則取出作業(yè),依據(jù)作業(yè)構(gòu)造命令行并啟動(dòng)多個(gè)任務(wù)執(zhí)行模塊的進(jìn)程來(lái)完成本次并行計(jì)算作業(yè);循環(huán)等待本次并行計(jì)算作業(yè)執(zhí)行結(jié)束;如果是作業(yè)不是正常執(zhí)行完成則判斷發(fā)生異常,則重新調(diào)度執(zhí)行本次作業(yè)。
本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
本發(fā)明提出了一種基于hadoop的數(shù)據(jù)處理方法,提高了云計(jì)算的效率,以滿足高性能云計(jì)算的需要。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明實(shí)施例的基于hadoop的數(shù)據(jù)處理方法的流程圖。
具體實(shí)施方式
下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán)利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié)以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無(wú)這些具體細(xì)節(jié)中的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實(shí)現(xiàn)本發(fā)明。
本發(fā)明的一方面提供了一種基于hadoop的數(shù)據(jù)處理方法。圖1是根據(jù)本發(fā)明實(shí)施例的基于hadoop的數(shù)據(jù)處理方法流程圖。
本發(fā)明設(shè)計(jì)的高性能云計(jì)算平臺(tái)不經(jīng)過(guò)虛擬化,直接使用異構(gòu)計(jì)算節(jié)點(diǎn)構(gòu)建云平臺(tái)底層;采用增加多級(jí)容錯(cuò)功能的并行計(jì)算接口技術(shù)和多線程技術(shù)重寫mapreduce,在計(jì)算中避免大量的無(wú)用的i/o操作,從而提高了云計(jì)算的效率,以滿足高性能云計(jì)算的需要。在節(jié)點(diǎn)異構(gòu)環(huán)境下,基于hadoop,使用異構(gòu)硬件架設(shè)云基礎(chǔ)設(shè)施服務(wù)層,實(shí)現(xiàn)作業(yè)二次調(diào)度,作業(yè)/任務(wù)回滾和動(dòng)態(tài)遷移,基于多級(jí)容錯(cuò)并行計(jì)算接口的建立mapreduce架構(gòu)。對(duì)中間結(jié)果進(jìn)行直接處理,減少不必要的i/o操作。
本發(fā)明的基于hadoop的云計(jì)算平臺(tái)架構(gòu)包括異構(gòu)計(jì)算節(jié)點(diǎn)、基于并行計(jì)算接口的容錯(cuò)單元、監(jiān)控模塊、作業(yè)管理模塊、任務(wù)管理模塊、分布式數(shù)據(jù)庫(kù)和mapreduce計(jì)算框架。
作業(yè)管理模塊用于保存作業(yè)隊(duì)列,管理作業(yè)的調(diào)度,監(jiān)控作業(yè)的執(zhí)行,提供相應(yīng)的容錯(cuò),支持遠(yuǎn)程作業(yè)提交以及結(jié)果返回。監(jiān)控模塊用于管理可用主機(jī)列表,發(fā)現(xiàn)異常節(jié)點(diǎn)并根據(jù)負(fù)載情況對(duì)節(jié)點(diǎn)排序,以首先選擇負(fù)載最小的節(jié)點(diǎn)執(zhí)行任務(wù)。任務(wù)管理模塊用于任務(wù)劃分和分配調(diào)度,任務(wù)執(zhí)行,收集并返回結(jié)果。
作業(yè)管理模塊中包含作業(yè)通信子模塊,根據(jù)用戶交互,實(shí)現(xiàn)作業(yè)提交與結(jié)果反饋;作業(yè)管理子模塊據(jù)作業(yè)的管理和調(diào)度,維護(hù)作業(yè)隊(duì)列,按優(yōu)先級(jí)進(jìn)行作業(yè)調(diào)度;監(jiān)控模塊據(jù)監(jiān)控所有節(jié)點(diǎn)的運(yùn)行情況和負(fù)載程度,并據(jù)此為任務(wù)執(zhí)行模塊提供所需的主機(jī)列表文件。
任務(wù)管理模塊是作業(yè)的具體執(zhí)行模塊,對(duì)作業(yè)進(jìn)行分片,并對(duì)分片進(jìn)行合理調(diào)度,最后收集并反饋計(jì)算結(jié)果。任務(wù)管理模塊得到作業(yè)管理與調(diào)度模塊分發(fā)的作業(yè)后,按設(shè)定的策略將作業(yè)劃分成多個(gè)任務(wù),與監(jiān)控模塊進(jìn)行交互以生成調(diào)度執(zhí)行并行計(jì)算任務(wù)所需的主機(jī)列表文件;然后基于并行計(jì)算接口的動(dòng)態(tài)進(jìn)程創(chuàng)建與管理模型,分配符合主機(jī)列表文件要求的負(fù)載進(jìn)程主節(jié)點(diǎn)將任務(wù)通過(guò)map過(guò)程分發(fā)給負(fù)載節(jié)點(diǎn),并從負(fù)載節(jié)點(diǎn)那里通過(guò)reduce過(guò)程得到對(duì)應(yīng)的任務(wù)結(jié)果;歸并這些中間結(jié)果就可以得到本次并行計(jì)算作業(yè)的最終結(jié)果,最后把這個(gè)結(jié)果遠(yuǎn)程反饋給任務(wù)提交者。一旦主節(jié)點(diǎn)偵測(cè)到某一個(gè)負(fù)載節(jié)點(diǎn)發(fā)生異常,則與監(jiān)控模塊交互以產(chǎn)生新的主機(jī)列表文件,并分配新的負(fù)載節(jié)點(diǎn)來(lái)接替異常的負(fù)載節(jié)點(diǎn)執(zhí)行任務(wù)。
作業(yè)通信子模塊初始化后,依照用戶的設(shè)定,需要綁定的本地套接服務(wù)器地址以及作業(yè)管理子模塊的套接服務(wù)器遠(yuǎn)程地址,并創(chuàng)建兩個(gè)工作線程:等待線程:循環(huán)等待接收來(lái)自任務(wù)管理模塊反饋的作業(yè)結(jié)果;發(fā)送線程,一旦用戶提交了新作業(yè),基于作業(yè)管理子模塊的服務(wù)器地址,借助套接字把用戶輸入的作業(yè)打包發(fā)送給作業(yè)管理子模塊。
作業(yè)管理子模塊等待作業(yè)通信子模塊提交給自己的作業(yè)。在工作線程中,創(chuàng)建了兩個(gè)工作線程。解析線程,用于維護(hù)本地的套接服務(wù)器,得到作業(yè)通信子模塊遠(yuǎn)程提交的作業(yè),解析該信息并確認(rèn)該信息是否符合規(guī)則,將合格的作業(yè)綁定作業(yè)提交者的地址后放置到多優(yōu)先級(jí)作業(yè)隊(duì)列中,以待被調(diào)度執(zhí)行。掃描線程,循環(huán)掃描多優(yōu)先級(jí)作業(yè)隊(duì)列以確定隊(duì)列中是否有較高優(yōu)先級(jí)的作業(yè),若有較高優(yōu)先級(jí)的作業(yè)存在,則取出作業(yè),依據(jù)作業(yè)構(gòu)造命令行并啟動(dòng)多個(gè)任務(wù)執(zhí)行模塊的進(jìn)程來(lái)完成本次并行計(jì)算作業(yè);循環(huán)等待本次并行計(jì)算作業(yè)執(zhí)行結(jié)束;如果是作業(yè)不是正常執(zhí)行完成則判斷發(fā)生異常,則重新調(diào)度執(zhí)行本次作業(yè)。
主節(jié)點(diǎn)進(jìn)程啟動(dòng)后,分析傳入的命令行參數(shù)以得到本次并行接口作業(yè)的相關(guān)信息。依據(jù)監(jiān)控模塊生成的主機(jī)列表文件,動(dòng)態(tài)分配多個(gè)負(fù)載節(jié)點(diǎn)并構(gòu)成一個(gè)通信域,然后等待負(fù)載節(jié)點(diǎn)申請(qǐng)任務(wù)或提交任務(wù)結(jié)果。
主節(jié)點(diǎn)將作業(yè)分成獨(dú)立的任務(wù),并維護(hù)一個(gè)初始值均為0的任務(wù)狀態(tài)數(shù)組,用以記錄任務(wù)執(zhí)行情況。一但有負(fù)載節(jié)點(diǎn)申請(qǐng)任務(wù),則先搜索得到狀態(tài)數(shù)組中為0的項(xiàng)所對(duì)應(yīng)的任務(wù),將任務(wù)分配給申請(qǐng)者并將狀態(tài)數(shù)組中對(duì)應(yīng)項(xiàng)置1;如果某任務(wù)完成,則狀態(tài)數(shù)組中對(duì)應(yīng)項(xiàng)應(yīng)該被置為2;如果執(zhí)行某個(gè)任務(wù)的進(jìn)程異常,則狀態(tài)數(shù)組中對(duì)應(yīng)項(xiàng)應(yīng)該被重置為0,以等待重新分配給其他節(jié)點(diǎn)執(zhí)行;如果狀態(tài)數(shù)組中標(biāo)記為1的某項(xiàng)所對(duì)應(yīng)的任務(wù)在規(guī)定時(shí)間范圍內(nèi)沒(méi)有反饋結(jié)果,則判定執(zhí)行該任務(wù)的進(jìn)程異常,并將狀態(tài)數(shù)組中該任務(wù)對(duì)應(yīng)的項(xiàng)重置0,以期被重新分配給其他節(jié)點(diǎn)執(zhí)行。
如果主節(jié)點(diǎn)發(fā)現(xiàn)任務(wù)對(duì)應(yīng)的狀態(tài)數(shù)組中的所有項(xiàng)都是2,則表明本次并行計(jì)算作業(yè)已經(jīng)完成,主節(jié)點(diǎn)將最終的作業(yè)結(jié)果通過(guò)套接字通信遠(yuǎn)程反饋給相對(duì)應(yīng)的任務(wù)提交者。
負(fù)載節(jié)點(diǎn)啟動(dòng)后,分析其父進(jìn)程是否存在,若不存在,則拒絕執(zhí)行;若存在,則判定自身是由主節(jié)點(diǎn)啟動(dòng)。負(fù)載節(jié)點(diǎn)向主節(jié)點(diǎn)申請(qǐng)任務(wù),得到任務(wù)后就按預(yù)定的業(yè)務(wù)方案執(zhí)行任務(wù);任務(wù)執(zhí)行完成后,將任務(wù)的結(jié)果反饋給主節(jié)點(diǎn)并申請(qǐng)下一個(gè)任務(wù)。如果負(fù)載節(jié)點(diǎn)得到的任務(wù)信息是無(wú)效,則本次并行計(jì)算任務(wù)成功完成,負(fù)載節(jié)點(diǎn)結(jié)束業(yè)務(wù)。
在本發(fā)明提出的高性能云計(jì)算平臺(tái)中包括三級(jí)容錯(cuò)方案:一級(jí)容錯(cuò)即作業(yè)二次調(diào)度。當(dāng)系統(tǒng)偵測(cè)到集群中某一節(jié)點(diǎn)在執(zhí)行任務(wù)中異常,則系統(tǒng)會(huì)立即重新調(diào)度執(zhí)行本次任務(wù)。二級(jí)容錯(cuò)即作業(yè)/任務(wù)回滾。系統(tǒng)回滾作業(yè)/任務(wù)至最近檢查點(diǎn)處執(zhí)行。如果主節(jié)點(diǎn)異常,則本次并行計(jì)算作業(yè)失敗,系統(tǒng)二次調(diào)度本次并行計(jì)算作業(yè)并回滾作業(yè)的執(zhí)行狀態(tài)至最近的檢查點(diǎn)處并繼續(xù)執(zhí)行作業(yè);如果負(fù)載節(jié)點(diǎn)異常,則系統(tǒng)嘗試重啟異常節(jié)點(diǎn)并回滾其任務(wù)執(zhí)行狀態(tài)至最近的檢查點(diǎn)處并繼續(xù)執(zhí)行任務(wù)。三級(jí)容錯(cuò)是動(dòng)態(tài)遷移。當(dāng)異常的負(fù)載節(jié)點(diǎn)在短時(shí)間內(nèi)無(wú)法得到回滾,也就是說(shuō)二級(jí)容錯(cuò)失敗的情況下,系統(tǒng)會(huì)主動(dòng)將異常的工作節(jié)點(diǎn)的任務(wù)遷移至其他工作節(jié)點(diǎn)執(zhí)行。為了保證并行接口集群計(jì)算能力的穩(wěn)定性,并行云計(jì)算平臺(tái)通過(guò)動(dòng)態(tài)分配新的負(fù)載進(jìn)程來(lái)替代異常負(fù)載進(jìn)程。
本發(fā)明系統(tǒng)中監(jiān)控模塊用于生成可用的主機(jī)列表:根據(jù)cpu核心數(shù)目和正在執(zhí)行任務(wù)的進(jìn)程數(shù)量比較,若進(jìn)程數(shù)小于核心數(shù)則將主機(jī)名加入主機(jī)列表。若進(jìn)程數(shù)不小于cpu核心數(shù),則將主機(jī)名從主機(jī)列表中移除。監(jiān)控程序中的0號(hào)進(jìn)程所在的節(jié)點(diǎn)為監(jiān)控服務(wù)器,非0進(jìn)程所在的節(jié)點(diǎn)任務(wù)節(jié)點(diǎn)。進(jìn)程模型的監(jiān)控的具體步驟為:
1)在每個(gè)非0進(jìn)程上創(chuàng)建一個(gè)內(nèi)核對(duì)象即事件信號(hào),執(zhí)行任務(wù)時(shí)進(jìn)程打開(kāi)此事件信號(hào),計(jì)算完成觸發(fā)事件信號(hào)。此信號(hào)用于獲取進(jìn)程是否等待退出。
2)得到主機(jī)名,計(jì)算出正在執(zhí)行任務(wù)的進(jìn)程數(shù)量m和進(jìn)程中己經(jīng)執(zhí)行完成等待退出的數(shù)量k,建立可用主機(jī)列表文件。
3)若正在執(zhí)行任務(wù)的進(jìn)程數(shù)量m等于進(jìn)程中己經(jīng)執(zhí)行完成等待退出的數(shù)量k,則將此主機(jī)名寫入主機(jī)列表文件。
主機(jī)列表的更新有兩種策略:定時(shí)更新和任務(wù)調(diào)度前更新。對(duì)于定時(shí)更新,監(jiān)控程序保持一直運(yùn)行,調(diào)度程序和監(jiān)控不發(fā)生交互;對(duì)于任務(wù)前更新,監(jiān)控程序的運(yùn)行發(fā)生在分配任務(wù)前,監(jiān)控程序在執(zhí)行任務(wù)前自動(dòng)啟動(dòng)更新主機(jī)列表,然后退出,主節(jié)點(diǎn)進(jìn)程根據(jù)可用主機(jī)列表進(jìn)行動(dòng)態(tài)一組進(jìn)程執(zhí)行任務(wù),若其中有進(jìn)程任務(wù)中途失敗,則再次自動(dòng)啟動(dòng)監(jiān)控程序更新列表,主節(jié)點(diǎn)進(jìn)程再根據(jù)可用主機(jī)列表啟動(dòng)相應(yīng)的數(shù)量的進(jìn)程完成失敗進(jìn)程的任務(wù)。
本發(fā)明任務(wù)調(diào)度基于作業(yè)的分片。作業(yè)從作業(yè)隊(duì)列里取出來(lái)以后,先進(jìn)行作業(yè)的一級(jí)分片,將一級(jí)分片分配到節(jié)點(diǎn),然后在節(jié)點(diǎn)內(nèi)進(jìn)行二次分片,將二級(jí)分片分配到線程,任務(wù)的分配采用負(fù)載池加線程池的方法。對(duì)于map操作,一級(jí)分片的分配是根據(jù)空閑負(fù)載節(jié)點(diǎn)申請(qǐng)?jiān)瓌t,計(jì)算能力強(qiáng)的節(jié)點(diǎn)申請(qǐng)更多的分片,計(jì)算能力弱的節(jié)點(diǎn)完成較少的分片。負(fù)載節(jié)點(diǎn)進(jìn)行完map任務(wù)之后,直接將map的結(jié)果作為reduce的輸入進(jìn)行第一次reduce,然后將結(jié)果發(fā)送給主節(jié)點(diǎn)做第二次reduce,并得到最終結(jié)果。
負(fù)載向負(fù)載池申請(qǐng)任務(wù),主節(jié)點(diǎn)將查詢查詢一級(jí)分片表,若查到狀態(tài)值為未執(zhí)行的分片,就將此分片信息發(fā)送給負(fù)載進(jìn)程。當(dāng)主節(jié)點(diǎn)在執(zhí)行任務(wù)動(dòng)態(tài)遷移的容錯(cuò)策略吋,發(fā)送分片任務(wù)的起始點(diǎn)和終止點(diǎn)的位置,而且將待遷移的一級(jí)分片中的所有二級(jí)分片的執(zhí)行信息表一起打包發(fā)送給負(fù)載。
若此作業(yè)是第一次被調(diào)度,則主節(jié)點(diǎn)將所有的一級(jí)分片都放入負(fù)載池進(jìn)行調(diào)度。若作業(yè)不是第一次被調(diào)度,則主節(jié)點(diǎn)挑選狀態(tài)值為未完成的片進(jìn)行調(diào)度。在執(zhí)行調(diào)度的過(guò)程中主節(jié)點(diǎn)持續(xù)更新執(zhí)行狀態(tài)表的內(nèi)容。
主節(jié)點(diǎn)根據(jù)負(fù)載發(fā)送的負(fù)載內(nèi)部狀態(tài)表的內(nèi)容,若檢測(cè)到此時(shí)負(fù)載上的此一級(jí)分片執(zhí)行到一定進(jìn)度而未完成,則給它發(fā)送另外一個(gè)分片任務(wù)。主節(jié)點(diǎn)若檢測(cè)到執(zhí)行狀態(tài)表中的內(nèi)容都為已完成,則整個(gè)任務(wù)完成,給負(fù)載節(jié)點(diǎn)發(fā)送等待退出信號(hào),此作業(yè)完成。對(duì)于負(fù)載節(jié)點(diǎn),—級(jí)分片發(fā)送到負(fù)載之后,負(fù)載先對(duì)此一級(jí)分片做內(nèi)存映射,然后檢測(cè)節(jié)點(diǎn)上所有處理器總的核心數(shù),開(kāi)啟相應(yīng)數(shù)量的線程,啟動(dòng)線程池執(zhí)行任務(wù)。
在負(fù)載中,用負(fù)載內(nèi)部狀態(tài)表代表一級(jí)分片。線程池根據(jù)負(fù)載內(nèi)部狀態(tài)表,取出還沒(méi)有執(zhí)行的分片執(zhí)行map任務(wù),然后將map任務(wù)的結(jié)果作為reduce任務(wù)的輸入執(zhí)行reduce任務(wù),在執(zhí)行的過(guò)程中,每完成一個(gè)二級(jí)分片就更新負(fù)載內(nèi)部狀態(tài)表的內(nèi)容,并將執(zhí)行得到結(jié)果和對(duì)負(fù)載內(nèi)部狀態(tài)表的修改信息一并發(fā)給主節(jié)點(diǎn),主節(jié)點(diǎn)再根據(jù)負(fù)載內(nèi)部狀態(tài)表更新所有分片的執(zhí)行狀態(tài)表。直到執(zhí)行狀態(tài)全部為執(zhí)行完成,所有分片執(zhí)行完成。
作業(yè)從提交到得到結(jié)果的流程如下:作業(yè)通信子模塊提交優(yōu)先級(jí)的作業(yè);作業(yè)管理子模塊從任務(wù)隊(duì)列取出最高優(yōu)先級(jí)的作業(yè);主節(jié)點(diǎn)對(duì)作業(yè)進(jìn)行分片,得到一級(jí)分片,放入負(fù)載池。負(fù)載節(jié)點(diǎn)向主節(jié)點(diǎn)申請(qǐng)任務(wù),主節(jié)點(diǎn)通過(guò)查詢狀態(tài)表得到一級(jí)分片的信息,然后獲取到此分片中所有二級(jí)分片的執(zhí)行信息打包發(fā)送給負(fù)載;負(fù)載接收到任務(wù),對(duì)此片做內(nèi)存映射和二次分片,檢測(cè)總的核心數(shù),建立線程池,然后將分片放入線程池,線程通過(guò)負(fù)載內(nèi)部狀態(tài)表取得二級(jí)任務(wù)片,直到表中內(nèi)容全部為執(zhí)行完成,退出線程,線程池銷毀。負(fù)載節(jié)點(diǎn)的每個(gè)線程執(zhí)行完成一個(gè)二級(jí)任務(wù)片后進(jìn)行一次reduce,將reduce結(jié)果和內(nèi)部狀態(tài)表發(fā)送給主節(jié)點(diǎn),主節(jié)點(diǎn)確定是否給此負(fù)載發(fā)送另外一個(gè)分片,若需要發(fā)送新的任務(wù),則繼續(xù)取任務(wù)發(fā)送給負(fù)載。直到狀態(tài)表中內(nèi)容全部為執(zhí)行完成后,主節(jié)點(diǎn)給每個(gè)負(fù)載發(fā)送退出指令,負(fù)載觸發(fā)事件信號(hào),通知監(jiān)控等待退出,所有負(fù)載和主節(jié)點(diǎn)等待一起退出。主節(jié)點(diǎn)將負(fù)載發(fā)送來(lái)的結(jié)果進(jìn)行reduce操作。主節(jié)點(diǎn)將結(jié)果發(fā)送給作業(yè)的提交者作業(yè)通信子模塊。
在節(jié)點(diǎn)數(shù)據(jù)緩存策略中,部署在云平臺(tái)的負(fù)載節(jié)點(diǎn)緩存云平臺(tái)中節(jié)點(diǎn)子網(wǎng)中的作業(yè)。將本地索引服務(wù)器被部署在每一個(gè)子網(wǎng)內(nèi),存儲(chǔ)正在所處云平臺(tái)內(nèi)共享的作業(yè),以及各個(gè)作業(yè)對(duì)應(yīng)的節(jié)點(diǎn)列表。負(fù)載節(jié)點(diǎn)以資源提供者的身份向本地索引服務(wù)器注冊(cè)自己所緩存的作業(yè)。本地索引服務(wù)器組織云平臺(tái)內(nèi)在線節(jié)點(diǎn)構(gòu)建云平臺(tái)中的子網(wǎng),幫助子網(wǎng)用戶方便地找到負(fù)載節(jié)點(diǎn)。管理服務(wù)器周期性地從每個(gè)云平臺(tái)內(nèi)的本地索引服務(wù)器收集作業(yè)請(qǐng)求信息;每次運(yùn)行緩存算法之后,管理服務(wù)器為每個(gè)云平臺(tái)生成兩張緩存對(duì)象清單,并且將這兩個(gè)作業(yè)列表分別發(fā)送給在云平臺(tái)中部署的兩個(gè)負(fù)載節(jié)點(diǎn);每一個(gè)存儲(chǔ)在節(jié)點(diǎn)中的作業(yè)的當(dāng)前狀態(tài)也周期性地上報(bào)給管理服務(wù)器。負(fù)載節(jié)點(diǎn)根據(jù)從管理服務(wù)器收到的作業(yè)列表,更新自己的進(jìn)程空間;一旦某個(gè)新的緩存對(duì)象同步完成,負(fù)載節(jié)點(diǎn)就會(huì)計(jì)算它的內(nèi)容hash值,并向所處云平臺(tái)內(nèi)的本地索引服務(wù)器注冊(cè)作業(yè)。
當(dāng)某個(gè)云平臺(tái)的用戶啟動(dòng)一個(gè)作業(yè)時(shí),該節(jié)點(diǎn)同時(shí)加入全局節(jié)點(diǎn)子網(wǎng)以及云平臺(tái)中的子網(wǎng)。并向本地索引服務(wù)器上報(bào)每個(gè)作業(yè)的運(yùn)行狀態(tài),本地索引服務(wù)器監(jiān)控云平臺(tái)內(nèi)子網(wǎng),將云平臺(tái)內(nèi)每一個(gè)活動(dòng)作業(yè)的相關(guān)信息發(fā)送給管理服務(wù)器,包括作業(yè)的唯一hash標(biāo)識(shí),作業(yè)大小,正在訪問(wèn)的用戶數(shù),云平臺(tái)內(nèi)當(dāng)前可用的副本數(shù),最近請(qǐng)求該作業(yè)的子網(wǎng)用戶數(shù)等。根據(jù)從本地索引服務(wù)器收集到的信息,管理服務(wù)器定期執(zhí)行一次緩存算法以得出每個(gè)云平臺(tái)內(nèi)的負(fù)載節(jié)點(diǎn)需要更新和刪除的作業(yè)。并將得出的作業(yè)清單立即發(fā)送給各個(gè)負(fù)載節(jié)點(diǎn)。當(dāng)同步完成一個(gè)作業(yè)之后,負(fù)載節(jié)點(diǎn)立即向云平臺(tái)內(nèi)的本地索引服務(wù)器注冊(cè)該作業(yè)。然后負(fù)載節(jié)點(diǎn)為本地請(qǐng)求該作業(yè)的用戶提供數(shù)據(jù)上傳。
進(jìn)一步地,通過(guò)以下過(guò)程把待分發(fā)的作業(yè)分片主動(dòng)發(fā)送給有空閑帶寬的節(jié)點(diǎn)。在管理服務(wù)器設(shè)置決策單元,根據(jù)收集到的信息,決定需要發(fā)送的作業(yè),并對(duì)其進(jìn)行分片,發(fā)送給輔助節(jié)點(diǎn)的大作業(yè)分片,并向用戶的存儲(chǔ)器分派存儲(chǔ)作業(yè)。給每個(gè)選中的發(fā)送目標(biāo)節(jié)點(diǎn)增加了一個(gè)作業(yè),該作業(yè)在后臺(tái)運(yùn)行,該作業(yè)與用戶自主執(zhí)行的小作業(yè)同時(shí)進(jìn)入資源提供狀態(tài),共用上傳帶寬。當(dāng)用戶離開(kāi)系統(tǒng),該后臺(tái)運(yùn)行的作業(yè)結(jié)束。管理服務(wù)器選擇發(fā)送目標(biāo)節(jié)點(diǎn),通知每個(gè)被選中的節(jié)點(diǎn)存儲(chǔ)發(fā)送目標(biāo)作業(yè)的一個(gè)分片;接收到發(fā)送作業(yè)的節(jié)點(diǎn)從云平臺(tái)和節(jié)點(diǎn)子網(wǎng)存儲(chǔ)指定的作業(yè)分片。發(fā)送的作業(yè)分片存儲(chǔ)完成后,發(fā)送目標(biāo)節(jié)點(diǎn)為其他存儲(chǔ)節(jié)點(diǎn)提供上傳,作為輔助節(jié)點(diǎn);當(dāng)分發(fā)過(guò)程結(jié)束,管理服務(wù)器向所有接收過(guò)發(fā)送作業(yè)的節(jié)點(diǎn)發(fā)出消息,通知其存儲(chǔ)器從用戶的進(jìn)程空間中清除先前發(fā)送的作業(yè)分片。
綜上所述,本發(fā)明提出了一種基于hadoop的數(shù)據(jù)處理方法,提高了云計(jì)算的效率,以滿足高性能云計(jì)算的需要。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算系統(tǒng)來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算系統(tǒng)上,或者分布在多個(gè)計(jì)算系統(tǒng)所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)系統(tǒng)中由計(jì)算系統(tǒng)來(lái)執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
應(yīng)當(dāng)理解的是,本發(fā)明的上述具體實(shí)施方式僅僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。