一種基于映射聚合的分布式計(jì)算作業(yè)的實(shí)現(xiàn)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及分布式計(jì)算系統(tǒng),具體涉及一種基于映射聚合的分布式計(jì)算作業(yè)的實(shí) 現(xiàn)方法及裝置。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)的發(fā)展,人類正式進(jìn)入了信息爆炸時(shí)期的。海量的信息在很多應(yīng)用都 會(huì)出現(xiàn),比如一些社交網(wǎng)絡(luò)應(yīng)用中記錄用戶行為日志通常都是以GB、TB或PB為單位的,有 的情況下數(shù)據(jù)量甚至更高。常規(guī)的單機(jī)計(jì)算模式已經(jīng)不能支撐如此巨大的數(shù)據(jù)量。
[0003] 在傳統(tǒng)的數(shù)據(jù)計(jì)算中,在一個(gè)機(jī)器上對(duì)數(shù)據(jù)進(jìn)行計(jì)算對(duì)于機(jī)器當(dāng)前的配置而言是 完全可以支撐的。例如,常見的服務(wù)器內(nèi)存是100G,把所有計(jì)算數(shù)據(jù)都緩存進(jìn)內(nèi)存進(jìn)行科學(xué) 計(jì)算是可以實(shí)現(xiàn)的。但是,對(duì)于一些應(yīng)用的用戶日志是以TB為單位的數(shù)據(jù)的情形,這些數(shù) 據(jù)是不可能一次性的全部緩存進(jìn)內(nèi)存進(jìn)行計(jì)算的;而即使可以對(duì)服務(wù)器的內(nèi)存進(jìn)行擴(kuò)充, 但是對(duì)硬件的要求非常高,運(yùn)算耗時(shí)也非常長(zhǎng),也即運(yùn)算代價(jià)是非常大的。此時(shí)一種可行的 方案是通過(guò)一定的運(yùn)算機(jī)制把計(jì)算任務(wù)分擔(dān)到多臺(tái)機(jī)器上,讓每臺(tái)機(jī)器都承擔(dān)一部分的計(jì) 算和數(shù)據(jù)存儲(chǔ)的任務(wù)。這就降低了對(duì)單機(jī)的配置要求,可以使用普通的機(jī)器進(jìn)行科學(xué)計(jì)算。 也就是說(shuō),計(jì)算必須以分布式的把巨大的計(jì)算任務(wù)分成小的單機(jī)可以承受的計(jì)算任務(wù)。
[0004] 但是,分布式計(jì)算的開發(fā)以及維護(hù)復(fù)雜而多變,需要考慮的問(wèn)題非常多,諸如,分 布式計(jì)算時(shí)數(shù)據(jù)的拆分與分配,計(jì)算的合并,計(jì)算節(jié)點(diǎn)錯(cuò)誤的處理,計(jì)算過(guò)程中的通信等。 上述的開發(fā)工作,在每次計(jì)算時(shí)都需要開發(fā)人員從頭統(tǒng)籌考慮,這對(duì)開發(fā)人員的要求是非 常高的?;诖耍植际接?jì)算框架應(yīng)運(yùn)而生,開發(fā)人員通過(guò)分布式框架將計(jì)算的細(xì)節(jié)進(jìn)行封 裝,并提供相應(yīng)的接口,后續(xù)開發(fā)人員僅僅需要考慮與現(xiàn)有框架的匹配,在計(jì)算框架的架構(gòu) 下進(jìn)行任務(wù)處理即可,無(wú)需理會(huì)分布式計(jì)算過(guò)程中各種問(wèn)題和計(jì)算異常問(wèn)題。
[0005] -種典型的分布式計(jì)算框架為map(映射)-reduce(聚合)分布式計(jì)算框架(也稱 為計(jì)算模型)。map-reduce分布式計(jì)算框架的基本原理如下:在map-reduce計(jì)算框架中, 在接收到任務(wù)之后,首先將一次任務(wù)分解成若干計(jì)算單元,每一次計(jì)算單元請(qǐng)求,被稱為作 業(yè)。為了完成這個(gè)作業(yè),它進(jìn)行兩步走的戰(zhàn)略,首先是將其拆分成若干個(gè)map任務(wù),分配到 不同的機(jī)器上去執(zhí)行,每一個(gè)map任務(wù)拿輸入文件的一部分作為自己的輸入,經(jīng)過(guò)一些計(jì) 算,生成某種格式的中間文件,這種格式,與最終所需的文件格式完全一致,但是僅僅包含 一部分?jǐn)?shù)據(jù)。因此,等到所有map任務(wù)完成后,它會(huì)進(jìn)入下一個(gè)步驟,用以合并這些中間文 件獲得最后的輸出文件。此時(shí),系統(tǒng)會(huì)生成若干個(gè)reduce任務(wù),同樣也是分配到不同的機(jī) 器去執(zhí)行,它的目標(biāo),就是將若干個(gè)map任務(wù)生成的中間文件為匯總到最后的輸出文件中 去。當(dāng)然,這個(gè)匯總不總會(huì)像1+1 = 2那么直接了當(dāng),這也就是reduce任務(wù)的價(jià)值所在。經(jīng) 過(guò)如上步驟,最終,作業(yè)完成,所需的目標(biāo)文件生成。整個(gè)算法的關(guān)鍵,就在于增加了一個(gè)中 間文件生成的流程,大大提高了靈活性,使其分布式擴(kuò)展性得到了保證。
[0006] 然而,采用上述的map-reduce框架實(shí)現(xiàn)關(guān)系運(yùn)算有很大的局限性。一些復(fù)雜關(guān)系 運(yùn)算需要多個(gè)map-reduce作業(yè)配合才能完成,這使得運(yùn)算過(guò)程冗長(zhǎng)復(fù)雜。而一些只需要一 級(jí)任務(wù)完成的簡(jiǎn)單關(guān)系運(yùn)算也必須嚴(yán)格遵守map-reduce計(jì)算框架。此外,map-reduce計(jì) 算框架的接口太過(guò)簡(jiǎn)單,只能完成兩級(jí)任務(wù)結(jié)構(gòu),而一些功能需要多個(gè)任務(wù)才能實(shí)現(xiàn),上述 這些局限性對(duì)關(guān)系運(yùn)算實(shí)現(xiàn)的靈活性和性能產(chǎn)生了很大的影響。
【發(fā)明內(nèi)容】
[0007] 本申請(qǐng)?zhí)峁┮环N基于映射聚合的分布式計(jì)算的實(shí)現(xiàn)方法,以解決現(xiàn)有計(jì)算結(jié)構(gòu)框 架中存在的上述問(wèn)題。
[0008] 本申請(qǐng)的方法包括一種基于映射聚合的分布式計(jì)算的實(shí)現(xiàn)方法,所述實(shí)現(xiàn)方法至 少包括兩個(gè)映射計(jì)算任務(wù);其中,還包括至少一個(gè)連接計(jì)算任務(wù);所述連接計(jì)算任務(wù)包括 如下步驟:
[0009]接收來(lái)自分布式計(jì)算作業(yè)的至少兩個(gè)映射計(jì)算任務(wù)的輸出數(shù)據(jù),作為連接計(jì)算任 務(wù)的輸入;
[0010] 對(duì)所述接收的輸入數(shù)據(jù)執(zhí)行連接運(yùn)算;
[0011] 將所述連接運(yùn)算的結(jié)果格式化為輸出文件格式輸出或存儲(chǔ)至分布式文件系統(tǒng)中。
[0012] 可選的,所述接收來(lái)分布式計(jì)算作業(yè)的至少兩個(gè)映射計(jì)算任務(wù)的輸出數(shù)據(jù)作為輸 入具體包括:
[0013] 接收來(lái)自不同分布式計(jì)算作業(yè)的至少兩個(gè)初始映射計(jì)算任務(wù)的輸出作為輸入。
[0014] 可選的,所述接收來(lái)不同自分布式計(jì)算作業(yè)的至少兩個(gè)初始映射計(jì)算任務(wù)的輸出 數(shù)據(jù)作為輸入的步驟中,每一映射計(jì)算任務(wù)包括如下步驟:
[0015] 獲取根據(jù)分布式計(jì)算作業(yè)數(shù)據(jù)大小對(duì)該分布式計(jì)算作業(yè)進(jìn)行切分而形成的塊數(shù) 據(jù),作為映射計(jì)算任務(wù)的輸入;
[0016] 按照配置的格式讀取并解析所述作為映射計(jì)算任務(wù)的輸入的塊數(shù)據(jù);
[0017] 對(duì)所述塊數(shù)據(jù)執(zhí)行映射操作,形成相應(yīng)的中間鍵值對(duì)集合;
[0018] 將生成的所述中間鍵值對(duì)集合按照設(shè)定的格式輸出,并將該輸出作為所述連接計(jì) 算任務(wù)的輸入。
[0019] 可選的,所述將生成的所述中間鍵值對(duì)集合按照設(shè)定的格式輸出包括:
[0020] 將生成的所述中間鍵值對(duì)集合中的數(shù)據(jù)按照設(shè)定的計(jì)算規(guī)則均勻分配內(nèi)存不同 區(qū)域中暫存,每一區(qū)域成為一個(gè)桶;
[0021] 對(duì)每一桶中的數(shù)據(jù)記錄按照選定的字段元素進(jìn)行排序;
[0022] 其中,桶的數(shù)目與該分布式式計(jì)算的映射任務(wù)相應(yīng)的規(guī)約任務(wù)數(shù)目相一致。
[0023] 可選的,將生成的所述中間鍵值對(duì)集合中的數(shù)據(jù)按照設(shè)定的計(jì)算規(guī)則均勻分配到 不同的桶中具體包括:
[0024] 將生成的所述中間鍵值對(duì)集合中的數(shù)據(jù)按照設(shè)定的hash計(jì)算規(guī)則均勻分配到不 同區(qū)域中暫存。
[0025] 可選的,所述將生成的所述中間鍵值對(duì)集合按照設(shè)定的格式輸出包括:
[0026] 將所述將生成的所述中間鍵值對(duì)集合中的數(shù)據(jù)按照設(shè)定的規(guī)則進(jìn)行分組;
[0027] 將每一組數(shù)據(jù)分配到內(nèi)存中的不同區(qū)域中暫存,每一區(qū)域稱為一個(gè)桶;
[0028] 對(duì)每一桶中的數(shù)據(jù)記錄按照選定的字段元素進(jìn)行排序;
[0029] 其中,分組的數(shù)目和桶的數(shù)目均與該分布式式計(jì)算的映射任務(wù)相應(yīng)的規(guī)約任務(wù)數(shù) 目相一致。
[0030] 可選的,所述對(duì)所述接收的輸入數(shù)據(jù)執(zhí)行連接運(yùn)算包括:
[0031] 對(duì)于接收的來(lái)自每一映射計(jì)算任務(wù)的輸出數(shù)據(jù),依據(jù)連接操作主鍵值并按照相同 的規(guī)則進(jìn)行排序;
[0032] 對(duì)接收到的排序后的數(shù)據(jù)分別進(jìn)行分組;
[0033] 選取來(lái)自于任一映射計(jì)算任務(wù)的任一分組數(shù)據(jù),該分組數(shù)據(jù)稱為第一分組數(shù)據(jù);
[0034] 將所述第一分組數(shù)據(jù)分別與所述其它映射計(jì)算任務(wù)的分組數(shù)據(jù)按照所述的排序 逐一進(jìn)行如下判斷:判斷所述第一分組數(shù)據(jù)是否與該其它映射計(jì)算任務(wù)的分組數(shù)據(jù)滿足連 接條件;
[0035] 若滿足,則對(duì)所述兩組數(shù)據(jù)執(zhí)行連接操作,并不再對(duì)該其它映射計(jì)算任務(wù)的剩余 分組進(jìn)行判斷;
[0036] 將所述第一分組數(shù)據(jù)的所有分組分別與其它所有映射計(jì)算任務(wù)的分組數(shù)據(jù)進(jìn)行 上述判斷和連接操作,直至所有映射計(jì)算任務(wù)的所有分組數(shù)據(jù)均與相應(yīng)的分組數(shù)據(jù)執(zhí)行了 所述判斷及連接操作。
[0037] 可選的,所述連接操作包括內(nèi)連接和外連接。
[0038] 可選的,所述連接操作為內(nèi)連接,
[0039] 所述對(duì)所述兩組數(shù)據(jù)執(zhí)行連接操作具體包括對(duì)所述兩組數(shù)據(jù)做笛卡爾積;
[0040] 相應(yīng)的,在第一分組數(shù)據(jù)與該其它映射計(jì)算任務(wù)的分組數(shù)據(jù)滿足不滿足連接條件 時(shí),舍棄該其它映射計(jì)算任務(wù)的該分組數(shù)據(jù)。
[0041] 可選的,所述依據(jù)連接操作主鍵值并按照相同的規(guī)則進(jìn)行排序具體包括:
[0042] 依據(jù)連接操作的主鍵值按照主鍵值由小到大或由大到小或主鍵值按照其他特定 的順序進(jìn)行排序。
[0043] 可選的,還包括聚合計(jì)算任務(wù);
[0044] 相應(yīng)的,所述將所述連接運(yùn)算的結(jié)果格式化為輸出文件格式輸出或存儲(chǔ)至分布式 文件系統(tǒng)中具體為將所述連接運(yùn)算的結(jié)果格式化為輸出文件格式輸出;且,將所述連接運(yùn) 算的結(jié)果格式化為輸出文件格式后的輸出結(jié)果作為所述聚合計(jì)算任務(wù)的輸入數(shù)據(jù)。
[0045] 相應(yīng)的,本申請(qǐng)還提供一種基于映射聚合的分布式計(jì)算的實(shí)現(xiàn)裝置,所述實(shí)現(xiàn)裝 置至少包括兩個(gè)用于實(shí)現(xiàn)映射計(jì)算任務(wù)的映射計(jì)算單元;其中,還包括至少一個(gè)用于實(shí)現(xiàn) 連接計(jì)算任務(wù)的連接運(yùn)算單元;所述連接運(yùn)算單元包括如下步驟:
[0046] 輸入單元,用于接收來(lái)自分布式計(jì)算作業(yè)的至少兩個(gè)映射計(jì)算任務(wù)的輸出數(shù)據(jù),