專利名稱:一種生成目標代碼的方法、數(shù)據(jù)處理的方法及裝置的制作方法
一種生成目標代碼的方法、數(shù)據(jù)處理的方法及裝置技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù),特別涉及一種生成Map/Reduce模型的目標代碼的方法、數(shù)據(jù)處理的方法及裝置。背景技術(shù):
分布式計算研究如何將一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然后把這些部分分配給許多計算機進行處理,最后把這些計算結(jié)果綜合起來得到最終的結(jié)果。而由Google提出的Map/Reduce模型,就是一個分布式計算模型。Map/ Reduce模型,通過Map階段,將可以并列執(zhí)行的任務(wù)分別并列執(zhí)行,然后再通過Reduce階段,將Map階段并列執(zhí)行的任務(wù)產(chǎn)生的中間結(jié)果合并,從而得到最終結(jié)果。在現(xiàn)有技術(shù)中, 已經(jīng)實現(xiàn)的Map/Reduce模型的分布式計算開發(fā)平臺,通常都是與開發(fā)語言緊密結(jié)合的, 這使得普通開發(fā)人員,當需要在自己的程序中嵌入分布式應(yīng)用時,必須熟悉相應(yīng)的Map/ Reduce平臺及其相應(yīng)的語言,這增加了開發(fā)人員的開發(fā)難度,同時也降低了代碼的可重用性。請參考圖1,圖1為現(xiàn)有技術(shù)中采用Map/Reduce模型進行數(shù)據(jù)處理的方法的示意圖。 在圖1中,Map階段和Reduce階段的目標代碼,指的都是與某種開發(fā)語言結(jié)合的代碼,在現(xiàn)有的Map/Reduce模型的實現(xiàn)方式中,這些目標代碼都是由普通開發(fā)人員通過手工的方式來生成的。并且Map/Reduce過程可能存在多個階段(如圖1中的第一階段、第N階段),這些階段也是由普通開發(fā)人員通過手工代碼的方式進行劃分的,可見,在現(xiàn)有的Map/Reduce 分布式應(yīng)用開發(fā)中,對普通開發(fā)人員的要求較高,并且由不同的開發(fā)人員開發(fā)的代碼,也很難重用。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種生成Map/Reduce模型的目標代碼的方法、數(shù)據(jù)處理的方法及裝置,以解決現(xiàn)有技術(shù)采用Map/Reduce模型進行數(shù)據(jù)處理時存在的對普通開發(fā)人員而言,開發(fā)難度高,代碼可重用性差的缺陷。
本發(fā)明為解決技術(shù)問題而采用的技術(shù)方案是提供一種生成Map/Reduce模型的目標代碼的方法,包括:A.獲取用戶指令;B.根據(jù)所述用戶指令生成中間碼原始圖,所述中間碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成;C.對所述中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖,其中所述執(zhí)行階段有一個或多個;D.將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述步驟B包括B1.將所述用戶指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作;B2.將各個不可再分割的數(shù)據(jù)處理操作轉(zhuǎn)換為所述中間碼原始圖的各個節(jié)點,并根據(jù)所述用戶指令中的數(shù)據(jù)傳遞方向得到連接各個節(jié)點的有向邊,從而得到所述中間碼原始圖。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述步驟C包括C1.按照預(yù)先定義的節(jié)點類型,在所述中間碼原始圖中隱含分組邏輯的節(jié)點前補充分組邏輯節(jié)點及聚合邏輯節(jié)點,得到中間 碼補充圖,所述預(yù)先定義的節(jié)點類型包括無分組邏輯節(jié)點、分組邏輯節(jié)點及隱含分組邏輯 的節(jié)點;C2.從所述中間碼補充圖的分組邏輯節(jié)點與聚合邏輯節(jié)點之間進行切分,并在切 分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的節(jié)點,得到與 Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述方法在步驟C前進一步包括對所述中間碼原 始圖中的節(jié)點進行優(yōu)化;所述優(yōu)化的策略包括以下S1、S2和S3中的至少一項S1.從所述 中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通過所述中間碼原始圖的有向邊能到達該 輸出節(jié)點的所有前置節(jié)點并進行標記,刪除所述中間碼原始圖中未被標記的節(jié)點;S2.將 等價節(jié)點進行合并,其中所述等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均相同,且不 依賴于其他節(jié)點或依賴于相同節(jié)點的節(jié)點;S3.將僅依賴于一個節(jié)點且滿足合并策略的鄰 接節(jié)點進行合并。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述S3采用的合并策略包括排序邏輯節(jié)點與取序 列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合并為一個過濾邏輯節(jié)點, 或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述步驟D中,將所述中間碼階段圖中的每個節(jié)點 翻譯為所述目標代碼中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,將所述中間碼 階段圖中的每條有向邊翻譯為所述目標代碼中的代表數(shù)據(jù)傳遞的一個方法。
本發(fā)明還提供了一種數(shù)據(jù)處理方法,包括a.獲取待處理的數(shù)據(jù);b.采用前文所 述的生成Map/Reduce模型的目標代碼的方法生成的目標代碼對所述待處理的數(shù)據(jù)進行處 理以得到處理結(jié)果。
本發(fā)明還提供了 一種生成Map/Reduce模型的目標代碼的裝置,包括指令獲取單 元,用于獲取用戶指令;圖生成單元,用于根據(jù)所述用戶指令生成中間碼原始圖,所述中間 碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成;分解單 元,用于對所述中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中 間碼階段圖,其中所述執(zhí)行階段有一個或多個;翻譯單元,用于將與Map/Reduce過程的各 個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述圖生成單元包括轉(zhuǎn)化子單元,用于將所述用戶 指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作;圖生成子單元,用于將各個不可再分割的數(shù) 據(jù)處理操作轉(zhuǎn)換為所述中間碼原始圖的各個節(jié)點,并根據(jù)所述用戶指令中的數(shù)據(jù)傳遞方向 得到連接各個節(jié)點的有向邊,從而得到所述中間碼原始圖。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述分解單元包括補充子單元,用于按照預(yù)先定義 的節(jié)點類型,在所述中間碼原始圖中隱含分組邏輯節(jié)點前補充分組邏輯節(jié)點及聚合邏輯節(jié) 點,得到中間碼補充圖,所述預(yù)先定義的節(jié)點類型包括無分組邏輯節(jié)點、分組邏輯節(jié)點及 隱含分組邏輯的節(jié)點;拆分子單元,用于從所述中間碼補充圖的分組邏輯節(jié)點與聚合邏輯 節(jié)點之間進行切分,并在切分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接 收相應(yīng)數(shù)據(jù)的節(jié)點,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述裝置進一步包括優(yōu)化單元,用于對所述中間碼 原始圖中的節(jié)點進行優(yōu)化;所述優(yōu)化的策略包括以下L1、L2和L3中的至少一項L1.從所述中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通過所述中間碼原始圖的有向邊能到達該輸出節(jié)點的所有前置節(jié)點并進行標記,刪除所述中間碼原始圖中未被標記的節(jié)點; L2.將等價節(jié)點進行合并,其中所述等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均相同,且不依賴其他節(jié)點或依賴相同節(jié)點的節(jié)點;L3.將僅依賴一個節(jié)點且滿足合并策略的鄰接節(jié)點進行合并。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述L3采用的合并策略包括排序邏輯節(jié)點與取序列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合并為一個過濾邏輯節(jié)點, 或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
根據(jù)本發(fā)明之一優(yōu)選實施例,所述翻譯單元將所述中間碼階段圖中的每個節(jié)點翻譯為所述目標代碼中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,將所述中間碼階段圖中的每條有向邊翻譯為所述目標代碼中的代表數(shù)據(jù)傳遞的一個方法。
本發(fā)明還提供了一種數(shù)據(jù)處理裝置,包括數(shù)據(jù)獲取單元,用于獲取待處理的數(shù)據(jù);數(shù)據(jù)處理單元,用于采用前文所述的生成Map/Reduce模型的目標代碼的裝置生成的目標代碼對所述待處理的數(shù)據(jù)進行處理以得到處理結(jié)果。
由以上技術(shù)方案可以看出,通過將普通開發(fā)人員的指令轉(zhuǎn)化為中間碼圖的形式, 可以向普通開發(fā)人員屏蔽Map/Reduce模型的具體實現(xiàn)過程,普通開發(fā)人員不需要了解 Map/Reduce模型的實現(xiàn)平臺及相應(yīng)的開發(fā)語言,就可以使用Map/Reduce模型實現(xiàn)分布式應(yīng)用開發(fā),降低了普通開發(fā)人員的工作難度,同時由于目標代碼不是由各個普通開發(fā)人員手工生成,也大大提高了代碼的可重用性,有利于代碼的移植和維護。
圖
閱;
圖
圖
圖
圖
圖
圖
圖
圖
圖
圖
閱;
圖1為現(xiàn)有技術(shù)中采用Map/Reduce模型進行數(shù)據(jù)處理的方法的示意圖;2為本發(fā)明中生成Map/Reduce模型的目標代碼的方法的實施例的流程示意3為本發(fā)明中中間碼原始圖的實施例示意圖;4為本發(fā)明中中間碼補充圖的實施例示意圖;5為本發(fā)明中中間碼補充圖切分后的第一階段的實施例示意圖 6為本發(fā)明中中間碼補充圖切分后的第二階段的實施例示意圖 7為本發(fā)明中中間碼補充圖切分后的第三階段的實施例示意圖 8為本發(fā)明中中間碼階段圖的第一階段的實施例示意圖;9為本發(fā)明中中間碼階段圖的第二階段的實施例示意圖;·10為本發(fā)明中中間碼階段圖的第三階段的實施例示意圖;11為本發(fā)明中數(shù)據(jù)處理方法的實施例的流程示意圖;12為本發(fā)明中采用Map/Reduce模型進行數(shù)據(jù)處理的方法的示意圖;13為本發(fā)明中生成Map/Reduce模型的目標代碼的裝置的實施例的結(jié)構(gòu)示意框
圖14為本發(fā)明中數(shù)據(jù)處理裝置的實施例的結(jié)構(gòu)示意框圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述。
請參考圖2,圖2為本發(fā)明中生成Map/Reduce模型的目標代碼的方法的流程示意圖。如圖2所示,所述方法包括
步驟101 :獲取用戶指令。
步驟102 :根據(jù)用戶指令生成中間碼原始圖。
步驟103 :對中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
步驟104 :將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/ Reduce過程的各個執(zhí)行階段的目標代碼。
下面對以上步驟進行詳細介紹。
在步驟101中,用戶指的是普通開發(fā)人員,用戶指令表達了普通開發(fā)人員希望實現(xiàn)的某種功能,其可以通過普通開發(fā)人員與圖形界面進行交互時得到,也可以通過普通開發(fā)人員直接輸入的某種程序語言代碼得到。例如下面片段就是以PHP格式的程序接口體現(xiàn)的用戶指令
DQuery: :1nput ()// 讀取輸入 數(shù)據(jù)
select (array (1 word' = > 1 _UrlFields. word/ ))//選擇其中的某一列,命名為word
filter (array (array word' , " ! = = " , null)))//以 word 列不為空為條件進行過濾
group (' word' )//按 word 列進行分組
coubtEachC word' , ' count_per_word' )//對每組進行計數(shù)
top (' count_per_word1,100)//求出計數(shù)前 100 的詞
outputAsFile (' word_count','詞頻統(tǒng)計')//輸出到文件
......
步驟102中,中間碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成的。步驟102包括步驟1021與步驟1022,其中步驟1021 :將用戶指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作,步驟1022 :將各個不可再分割的數(shù)據(jù)處理操作轉(zhuǎn)換為中間碼原始圖的各個節(jié)點,并根據(jù)用戶指令中的數(shù)據(jù)傳遞方向得到連接各個節(jié)點的有向邊,從而得到中間碼原始圖。
以上面所舉的用戶指令為例,不可再分割的數(shù)據(jù)處理操作包括讀取數(shù)據(jù)、選擇字段、進行過濾、進行分組/聚合、進行計數(shù)、進行排序、輸出數(shù)據(jù)。其中分組/聚合的數(shù)據(jù)處理操作是成對出現(xiàn)的,用戶指令中有分組的邏輯,在對應(yīng)的不可再分割的數(shù)據(jù)處理操作中就會成對出現(xiàn)分組/聚合的數(shù)據(jù)處理操作。請參考圖3,圖3為本發(fā)明中中間碼原始圖的實施例示意圖。圖3中的每一個節(jié)點分別代表了上述的一個不可再分割的數(shù)據(jù)處理操作,而圖中箭頭所指的有向邊就是數(shù)據(jù)傳遞的方向。其中l(wèi)oad節(jié)點P34代表讀取數(shù)據(jù),select節(jié)點 P35代表選擇字段,filter節(jié)點P36代表進行過濾,group節(jié)點P37代表進行分組,reduce 節(jié)點P38代表進行聚合,count節(jié)點P32代表進行計數(shù),sort節(jié)點P39代表進行排序,store 節(jié)點P40代表輸出數(shù)據(jù)。從圖3中可以看出,中間碼原始圖中有虛線連接的部分,這是中間碼原始圖中的一個子圖,子圖表示對分組后的每一組都需要進行的一次操作,在本例中,表 示對分組后的每一組都進行一次計數(shù)操作。各組計數(shù)的結(jié)果由reduce節(jié)點P38進行聚合。
步驟103中,由于Map/Reduce過程可以分為一個或多個執(zhí)行階段,因此需要在這 個步驟中將中間碼原始圖分解成與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段 圖。步驟103包括步驟1031及步驟1032。
其中步驟1031 :按照預(yù)先定義的節(jié)點類型,在中間碼原始圖中隱含分組邏輯的節(jié) 點前補充分組邏輯節(jié)點及聚合邏輯節(jié)點,得到中間碼補充圖,預(yù)先定義的節(jié)點類型包括無 分組邏輯節(jié)點、分組邏輯節(jié)點及隱含分組邏輯的節(jié)點。
中間碼原始圖中的每一個節(jié)點,按照其本身的語義邏輯,都預(yù)先被定義了 一個節(jié) 點類型,例如選擇節(jié)點(select)、過濾節(jié)點(filter)等,屬于無分組邏輯的節(jié)點,而從用 戶指令中直接得到的分組節(jié)點(group),就屬于分組邏輯節(jié)點,而排序節(jié)點(sort)屬于隱 含分組邏輯的節(jié)點。在本例中,排序操作(sort)從語義上來說,是要求在整個數(shù)據(jù)集上進 行的操作,因此它暗含有一個將數(shù)據(jù)分為一組的要求。當然,在其他的實施例中,排序操作 (sort)也可能是在分組操作(group)后,基于各組上進行的,這時的排序節(jié)點(sort)則不 屬于隱含分組邏輯的節(jié)點。
請參考圖4,圖4為本發(fā)明中中間碼補充圖的實施例示意圖。如圖4所示,與圖3 相比,圖4增加了 group節(jié)點P41及reduce節(jié)點P42,且sort節(jié)點P39作為子圖與reduce 節(jié)點P42相連。這表示排序操作(sort)對分組后的每一組執(zhí)行一次,且執(zhí)行結(jié)果由reduce 節(jié)點P42進行聚合,在本例中,由于排序操作(sort)是在整個數(shù)據(jù)集上進行的,因此group 節(jié)點P41只將數(shù)據(jù)分為一組,而排序操作(sort)實際上只執(zhí)行一次。
步驟1032 :從中間碼補充圖的分組邏輯節(jié)點與聚合邏輯節(jié)點之間進行切分,并在 切分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的節(jié)點,得到 與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
以圖4為例進行說明,在group節(jié)點P37和reduce節(jié)點P38之間、group節(jié)點P41 及reduce節(jié)點P42之間進行切分,則圖4所示的中間碼補充圖可以變?yōu)槿齻€部分,分別代 表了 Map/Reduce過程的三個執(zhí)行階段。請參考圖5至圖7,其中圖5為本發(fā)明中中間碼補 充圖切分后的第一階段的實施例示意圖,圖6為本發(fā)明中中間碼補充圖切分后的第二階段 的實施例示意圖,圖7為本發(fā)明中中間碼補充圖切分后的第三階段的實施例示意圖。
在得到圖5至圖7所示的三個執(zhí)行階段后,為了使前后兩個執(zhí)行階段的數(shù)據(jù)流能 夠正確銜接,還需要在每個執(zhí)行階段之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng) 數(shù)據(jù)的節(jié)點,從而得到與Map/Redcue過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。請參考圖 8至圖10,其中圖8為本發(fā)明中中間碼階段圖的第一階段的實施例示意圖,圖9為本發(fā)明中 中間碼階段圖的第二階段的實施例示意圖,圖10為本發(fā)明中中間碼階段圖的第三階段的 實施例的示意圖。如圖8至圖10所示,map_shuffle節(jié)點P371及map_shuffle節(jié)點P411為 標記數(shù)據(jù)源的節(jié)點,用于將本階段的數(shù)據(jù)輸出,并打上標記,表明數(shù)據(jù)是從哪來的;redUce_ shuffle節(jié)點P372及reduce_shuffIe節(jié)點P412為按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的節(jié)點,用 于將符合數(shù)據(jù)源標記的上一階段的數(shù)據(jù)向下傳遞。
步驟104中,將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯成 Map/Reduce過程的各個執(zhí)行階段的目標代碼,實際上就是將中間碼階段圖中的每個節(jié)點翻譯成目標代碼中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,而將中間碼階段圖中 的每條有向邊翻譯成目標代碼中的代表數(shù)據(jù)傳遞的一個方法。目標代碼是指與開發(fā)語言有 關(guān)的程序代碼,作為普通技術(shù)人員,應(yīng)該知道類、實例與方法的概念,因此在此不再詳述這 個過程。
在本發(fā)明的另一個實施例中,在步驟103前,還進一步包括對中間碼原始圖中的 節(jié)點進行優(yōu)化。對中間碼原始圖中的節(jié)點進行優(yōu)化,是為了提高程序執(zhí)行的效率。優(yōu)化的 策略包括以下幾種
1、從中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通過有向邊能到達該輸出節(jié) 點的所有前置節(jié)點并進行標記,刪除中間碼原始圖中未被標記的節(jié)點。
由于中間碼原始圖是根據(jù)用戶指令得到的,不排除由于用戶指令的錯誤或其他原 因,造成中間碼原始圖中存在孤立存在的節(jié)點(即不依賴于任何節(jié)點,也不被任何節(jié)點依 賴的節(jié)點),通過上面所述的方法,可以將中間碼原始圖中的所有有依賴關(guān)系的節(jié)點找到, 從而可以將孤立存在的節(jié)點刪除。
2、將等價節(jié)點進行合并,其中等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均 相同,且不依賴于其他節(jié)點或依賴于相同節(jié)點的節(jié)點。每個節(jié)點都有一些屬于該節(jié)點自身 的屬性,其中一個屬性指出了數(shù)據(jù)來源,如果兩個節(jié)點除了數(shù)據(jù)來源的屬性不同,其他的各 個屬性均相同,也就是說,這兩個節(jié)點肯定屬于同一類原子操作,并且這兩個節(jié)點均不依賴 于其他節(jié)點,例如輸入節(jié)點(load),或者這兩個節(jié)點依賴于相同的節(jié)點(同一個或多個節(jié) 點),那么這兩個節(jié)點就是等價的,因此,可以將這兩個等價節(jié)點合并。
3、將僅依賴于一個節(jié)點且滿足合并策略的鄰接節(jié)點進行合并,其中合并策略包 括排序邏輯節(jié)點與取序列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合 并為一個過濾邏輯節(jié)點,或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
例如假設(shè)排序節(jié)點為sort,有一個取序列值節(jié)點為limit,前者用于按照一定的 順序排序,后者用于取出排序在前面的若干條記錄,這時可將sort節(jié)點與limit節(jié)點合并 為sort節(jié)點。
又如過濾邏輯的節(jié)點為filter,鄰接的兩個filter節(jié)點可以合并為一個filter 節(jié)點,選擇邏輯的節(jié)點為select,鄰接的兩個select節(jié)點可以合并為一個select節(jié)點。
請參考圖11,圖11為本發(fā)明中數(shù)據(jù)處理方法的實施例的流程示意圖。如圖11所 示,所述方法包括
步驟201 :獲取待處理的數(shù)據(jù)。
步驟202 :采用前文所述的生成Map/Reduce模型的目標代碼的方法生成的目標代 碼對待處理的數(shù)據(jù)進行處理以得到處理結(jié)果。
請參考圖12,圖12為本發(fā)明中采用Map/Reduce模型進行數(shù)據(jù)處理的方法的示意 圖。與現(xiàn)有技術(shù)相比,本發(fā)明的目標代碼不需要普通開發(fā)人員手工生成,而是通過前文所說 的生成目標代碼的方法,自動生成的。
請參考圖13,圖13為本發(fā)明中生成Map/Reduce模型的目標代碼的裝置的實施例 的結(jié)構(gòu)示意框圖。如圖13所示,所述裝置包括指令獲取單元301、圖生成單元302、優(yōu)化單 元303、分解單元304和翻譯單元305。
其中指令獲取單元301,用于獲取用戶指令。
用戶指的是普通開發(fā)人員,用戶指令表達了普通開發(fā)人員希望實現(xiàn)的某種功能, 其可以通過普通開發(fā)人員與圖形界面進行交互時得到,也可以通過普通開發(fā)人員直接輸入的某種程序語言代碼得到。例如下面片段就是以PHP格式的程序接口體現(xiàn)的用戶指令
DQuery: :1nput ()// 讀取輸入數(shù)據(jù)
select (array (1 word' = > 1 _UrlFields. word/ ))//選擇其中的某一列,命名為word
filter (array (array word' , " ! = = " , null)))//以 word 列不為空為條件進行過濾
group (' word' )//按 word 列進行分組
coubtEachC word' , ' count_per_word' )//對每組進行計數(shù)
top {' count_per_word',100)//求出計數(shù)前 100 的詞
outputAsFile {' word_count','詞頻統(tǒng)計')//輸出到文件
圖生成單元302,用于根據(jù)用戶指令生成中間碼原始圖,其中中間碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成的。
圖生成單元302包括轉(zhuǎn)化子單元3021和圖生成子單元3022,其中轉(zhuǎn)化子單元 3021,用于將用戶指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作,圖生成子單元3022,用于將各個不可再分割的數(shù)據(jù)處理操作轉(zhuǎn)換為中間碼原始圖的各個節(jié)點,并根據(jù)用戶指令中的數(shù)據(jù)傳遞方向得到連接各個節(jié)點的有向邊,從而得到中間碼原始圖。
以上面所舉的用戶指令為例,不可再分割的數(shù)據(jù)處理操作包括讀取數(shù)據(jù)、選擇字段、進行過濾、進行分組/聚合、進行計數(shù)、進行排序、輸出數(shù)據(jù)。其中分組/聚合的數(shù)據(jù)處理操作是成對出現(xiàn)的,用戶指令中有分組的邏輯,在對應(yīng)的不可再分割的數(shù)據(jù)處理操作中就會成對出現(xiàn)分組/聚合的數(shù)據(jù)處理操作。請參考圖3,圖3為本發(fā)明中中間碼原始圖的實施例示意圖。圖3中的每一個節(jié)點分別代表了上述的一個不可再分割的數(shù)據(jù)處理操作,而圖中箭頭所指的有向邊就是數(shù)據(jù)傳遞的方向。其中l(wèi)oad節(jié)點P34代表讀取數(shù)據(jù),select節(jié)點 P35代表選擇字段,filter節(jié)點P36代表進行過濾,group節(jié)點P37代表進行分組,reduce 節(jié)點P38代表進行聚合,count節(jié)點P32代表進行計數(shù),sort節(jié)點P39代表進行排序,store 節(jié)點P40代表輸出數(shù)據(jù)。從圖3中可以看出,中間碼原始圖中有虛線連接的部分,這是中間碼原始圖中的一個子圖,子圖表示對分組后的每一組都需要進行的一次操作,在本例中,表示對分組后的每一組都進行一次計數(shù)操作。各組計數(shù)的結(jié)果由reduce節(jié)點P38進行聚合。
優(yōu)化單元303,用于對中間碼原始圖中的節(jié)點進行優(yōu)化。
對中間碼原始圖中的節(jié)點進行優(yōu)化,是為了提高程序執(zhí)行的效率。優(yōu)化的策略包括以下幾種
1、從中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通 過有向邊能到達該輸出節(jié)點的所有前置節(jié)點并進行標記,刪除中間碼原始圖中未被標記的節(jié)點。
由于中間碼原始圖是根據(jù)用戶指令得到的,不排除由于用戶指令的錯誤或其他原因,造成中間碼原始圖中存在孤立存在的節(jié)點(即不依賴于任何節(jié)點,也不被任何節(jié)點依賴的節(jié)點),通過上面所述的方法,可以將中間碼原始圖中的所有有依賴關(guān)系的節(jié)點找到, 從而可以將孤立存在的節(jié)點刪除。
2、將等價節(jié)點進行合并,其中等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均相同,且不依賴于其他節(jié)點或依賴于相同節(jié)點的節(jié)點。每個節(jié)點都有一些屬于該節(jié)點自身 的屬性,其中一個屬性指出了數(shù)據(jù)來源,如果兩個節(jié)點除了數(shù)據(jù)來源的屬性不同,其他的各 個屬性均相同,也就是說,這兩個節(jié)點肯定屬于同一類原子操作,并且這兩個節(jié)點均不依賴 于其他節(jié)點,例如輸入節(jié)點(load),或者這兩個節(jié)點依賴于相同的節(jié)點(同一個或多個節(jié) 點),那么這兩個節(jié)點就是等價的,因此,可以將這兩個等價節(jié)點合并。
3、將僅依賴于一個節(jié)點且滿足合并策略的鄰接節(jié)點進行合并,其中合并策略包 括排序邏輯節(jié)點與取序列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合 并為一個過濾邏輯節(jié)點,或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
例如假設(shè)排序節(jié)點為sort,有一個取序列值節(jié)點為limit,前者用于按照一定的 順序排序,后者用于取出排序在前面的若干條記錄,這時可將sort節(jié)點與limit節(jié)點合并 為sort節(jié)點。
又如過濾邏輯的節(jié)點為filter,鄰接的兩個filter節(jié)點可以合并為一個filter 節(jié)點,選擇邏輯的節(jié)點為select,鄰接的兩個select節(jié)點可以合并為一個select節(jié)點。
分解單元304,用于對中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí) 行階段對應(yīng)的中間碼階段圖。由于Map/Reduce過程可以分為一個或多個執(zhí)行階段,因此分 解單元304需要將中間碼原始圖分解成與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼 階段圖。
分解單元304包括補充子單元3041、拆分子單元3042,其中補充子單元3041,用于 按照預(yù)先定義的節(jié)點類型,在中間碼原始圖中隱含分組邏輯的節(jié)點前補充分組邏輯節(jié)點及 聚合邏輯節(jié)點,得到中間碼補充圖,預(yù)先定義的節(jié)點類型包括無分組邏輯節(jié)點、分組邏輯 節(jié)點及隱含分組邏輯的節(jié)點。
中間碼原始圖中的每一個節(jié)點,按照其本身的語義邏輯,都預(yù)先被定義了 一個節(jié) 點類型,例如選擇節(jié)點(select)、過濾節(jié)點(filter)等,屬于無分組邏輯的節(jié)點,而從用 戶指令中直接得到的分組節(jié)點(group),就屬于分組邏輯節(jié)點,而排序節(jié)點(sort)屬于隱 含分組邏輯的節(jié)點。在本例中,排序操作(sort)從語義上來說,是要求在整個數(shù)據(jù)集上進 行的操作,因此它暗含有一個將數(shù)據(jù)分為一組的要求。當然,在其他的實施例中,排序操作 (sort)也可能是在分組操作(group)后,基于各組上進行的,這時的排序節(jié)點(sort)則不 屬于隱含分組邏輯的節(jié)點。
請參考圖4,圖4為本發(fā)明中中間碼補充圖的實施例示意圖。如圖4所示,與圖3 相比,圖4增加了 group節(jié)點P41及reduce節(jié)點P42,且sort節(jié)點P39作為子圖與reduce 節(jié)點P42相連。這表示排序操作(sort)對分組后的每一組執(zhí)行一次,且執(zhí)行結(jié)果由reduce 節(jié)點P42進行聚合,在本例中,由于排序操作(sort)是在整個數(shù)據(jù)集上進行的,因此group 節(jié)點P41只將數(shù)據(jù)分為一組,而排序操作(sort)實際上只執(zhí)行一次。
拆分子單元3042,用于從中間碼補充圖的分組邏輯節(jié)點與聚合邏輯節(jié)點之間進行 切分,并在切分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的 節(jié)點,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
以圖4為例進行說明,在group節(jié)點P37和reduce節(jié)點P38之間、group節(jié)點P41 及reduce節(jié)點P42之間進行切分,則圖4所示的中間碼補充圖可以變?yōu)槿齻€部分,分別代 表了 Map/Reduce過程的三個執(zhí)行階段。請參考圖5至圖7,其中圖5為本發(fā)明中中間碼補充圖切分后的第一階段的實施例示意圖,圖6為本發(fā)明中中間碼補充圖切分后的第二階段 的實施例示意圖,圖7為本發(fā)明中中間碼補充圖切分后的第三階段的實施例示意圖。
在得到圖5至圖7所示的三個執(zhí)行階段后,為了使前后兩個執(zhí)行階段的數(shù)據(jù)流能 夠正確銜接,還需要在每個執(zhí)行階段之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng) 數(shù)據(jù)的節(jié)點,從而得到與Map/Redcue過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。請參考 圖8至圖10,其中圖8為本發(fā)明中中間碼階段圖的第一階段的實施例示意圖,圖9為本發(fā) 明中中間碼階段圖的第二階段的實施例示意圖,圖10為本發(fā)明中中間碼階段圖的第三階 段的實施例的示意圖。如圖8至圖10所示,map_shuffle節(jié)點P371及map_shuffle節(jié)點 P41_l為標記數(shù)據(jù)源的節(jié)點,用于將本階段的數(shù)據(jù)輸出,并打上標記,表明數(shù)據(jù)是從哪來的; reduce_shuffle節(jié)點P37_2及reduce_shuffIe節(jié)點P41_2為按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù) 的節(jié)點,用于將符合數(shù)據(jù)源標記的上一階段的數(shù)據(jù)向下傳遞。
翻譯單元305,用于將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻 譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。
將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯成Map/Reduce過 程的各個執(zhí)行階段的目標代碼,實際上就是將中間碼階段圖中的每個節(jié)點翻譯成目標代碼 中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,而將中間碼階段圖中的每條有向邊 翻譯成目標代碼中的代表數(shù)據(jù)傳遞的一個方法。目標代碼是指與開發(fā)語言有關(guān)的程序代 碼,作為普通技術(shù)人員,應(yīng)該知道類、實例與方法的概念,因此在此不再詳述這個過程。
值得注意的是,在其他實施例中,優(yōu)化單元303也可以不存在,對中間碼原始圖不 進行優(yōu)化,并不影響本發(fā)明的實施。
請參考圖14,圖14為本發(fā)明中數(shù)據(jù)處理裝置的實施例的結(jié)構(gòu)示意框圖。如圖14 所示,所述裝置包括數(shù)據(jù)獲取單元401和數(shù)據(jù)處理單元402,其中數(shù)據(jù)獲取單元401,用于獲 取待處理的數(shù)據(jù),數(shù)據(jù)處理單元402,用于采用前文所述的生成Map/Reduce模型的目標代 碼的裝置生成的目標代碼對待處理的數(shù)據(jù)進行處理以得到處理結(jié)果。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
權(quán)利要求
1.一種生成Map/Reduce模型的目標代碼的方法,其特征在于,所述方法包括A.獲取用戶指令;B.根據(jù)所述用戶指令生成中間碼原始圖,所述中間碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成;C.對所述中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖,其中所述執(zhí)行階段有一個或多個;D.將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B包括B1.將所述用戶指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作;B2.將各個不可再分割的數(shù)據(jù)處理操作轉(zhuǎn)換為所述中間碼原始圖的各個節(jié)點,并根據(jù)所述用戶指令中的數(shù)據(jù)傳遞方向得到連接各個節(jié)點的有向邊,從而得到所述中間碼原始圖。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C包括Cl.按照預(yù)先定義的節(jié)點類型,在所述中間碼原始圖中隱含分組邏輯的節(jié)點前補充分組邏輯節(jié)點及聚合邏輯節(jié)點,得到中間碼補充圖,所述預(yù)先定義的節(jié)點類型包括無分組邏輯節(jié)點、分組邏輯節(jié)點及隱含分組邏輯的節(jié)點;C2.從所述中間碼補充圖的分組邏輯節(jié)點與聚合邏輯節(jié)點之間進行切分,并在切分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的節(jié)點,得到與Map/ Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法在步驟C前進一步包括對所述中間碼原始圖中的節(jié)點進行優(yōu)化;所述優(yōu)化的策略包括以下S1、S2和S3中的至少一項51.從所述中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通過所述中間碼原始圖的有向邊能到達該輸出節(jié)點的所有前置節(jié)點并進行標記,刪除所述中間碼原始圖中未被標記的節(jié)點;52.將等價節(jié)點進行合并,其中所述等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均相同,且不依賴于其他節(jié)點或依賴于相同節(jié)點的節(jié)點;53.將僅依賴于一個節(jié)點且滿足合并策略的鄰接節(jié)點進行合并。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述S3采用的合并策略包括排序邏輯節(jié)點與取序列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合并為一個過濾邏輯節(jié)點,或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟D中,將所述中間碼階段圖中的每個節(jié)點翻譯為所述目標代碼中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,將所述中間碼階段圖中的每條有向邊翻譯為所述目標代碼中的代表數(shù)據(jù)傳遞的一個方法。
7.一種數(shù)據(jù)處理方法,其特征在于,所述方法包括a.獲取待處理的數(shù)據(jù);b.采用權(quán)利要求1至6中任一權(quán)項所述方法生成的目標代碼對所述待處理的數(shù)據(jù)進行處理以得到處理結(jié)果。
8.—種生成Map/Reduce模型的目標代碼的裝置,其特征在于,所述裝置包括 指令獲取單元,用于獲取用戶指令; 圖生成單元,用于根據(jù)所述用戶指令生成中間碼原始圖,所述中間碼原始圖由指代數(shù)據(jù)處理方式的節(jié)點和節(jié)點之間指代數(shù)據(jù)傳遞方向的有向邊構(gòu)成; 分解單元,用于對所述中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖,其中所述執(zhí)行階段有一個或多個; 翻譯單元,用于將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述圖生成單元包括 轉(zhuǎn)化子單元,用于將所述用戶指令轉(zhuǎn)化為多個不可再分割的數(shù)據(jù)處理操作; 圖生成子單元,用于將各個不可再分割的數(shù)據(jù)處理操作轉(zhuǎn)換為所述中間碼原始圖的各個節(jié)點,并根據(jù)所述用戶指令中的數(shù)據(jù)傳遞方向得到連接各個節(jié)點的有向邊,從而得到所述中間碼原始圖。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述分解單元包括 補充子單元,用于按照預(yù)先定義的節(jié)點類型,在所述中間碼原始圖中隱含分組邏輯的節(jié)點前補充分組邏輯節(jié)點及聚合邏輯節(jié)點,得到中間碼補充圖,所述預(yù)先定義的節(jié)點類型包括無分組邏輯節(jié)點、分組邏輯節(jié)點及隱含分組邏輯的節(jié)點; 拆分子單元,用于從所述中間碼補充圖的分組邏輯節(jié)點與聚合邏輯節(jié)點之間進行切分,并在切分后的每個部分之間補充標記數(shù)據(jù)源的節(jié)點和按數(shù)據(jù)源標記接收相應(yīng)數(shù)據(jù)的節(jié)點,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述裝置進一步包括優(yōu)化單元,用于對所述中間碼原始圖中的節(jié)點進行優(yōu)化; 所述優(yōu)化的策略包括以下L1、L2和L3中的至少一項 L1.從所述中間碼原始圖中的輸出節(jié)點開始向前遍歷,找出通過所述中間碼原始圖的有向邊能到達該輸出節(jié)點的所有前置節(jié)點并進行標記,刪除所述中間碼原始圖中未被標記的節(jié)點; L2.將等價節(jié)點進行合并,其中所述等價節(jié)點是除了數(shù)據(jù)源屬性不同,其他所有屬性均相同,且不依賴其他節(jié)點或依賴相同節(jié)點的節(jié)點; L3.將僅依賴一個節(jié)點且滿足合并策略的鄰接節(jié)點進行合并。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述L3采用的合并策略包括排序邏輯節(jié)點與取序列值邏輯節(jié)點合并為一個排序邏輯節(jié)點,或兩個過濾邏輯節(jié)點合并為一個過濾邏輯節(jié)點,或兩個選擇邏輯節(jié)點合并為一個選擇邏輯節(jié)點。
13.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述翻譯單元將所述中間碼階段圖中的每個節(jié)點翻譯為所述目標代碼中的代表不可再分割的數(shù)據(jù)處理操作的一個類的實例,將所述中間碼階段圖中的每條有向邊翻譯為所述目標代碼中的代表數(shù)據(jù)傳遞的一個方法。
14.一種數(shù)據(jù)處理裝置,其特征在于,所述裝置包括 數(shù)據(jù)獲取單元,用于獲取待處理的數(shù)據(jù); 數(shù)據(jù)處理單元,用于采用權(quán)利要求8至13中任一權(quán)項所述裝置生成的目標代碼對所述待處理的數(shù)據(jù)進行處理以得到處理結(jié)果。
全文摘要
本發(fā)明提供了一種生成Map/Reduce模型的目標代碼的方法、數(shù)據(jù)處理的方法及裝置,其中生成Map/Reduce模型的目標代碼的方法,包括A.獲取用戶指令;B.根據(jù)所述用戶指令生成中間碼原始圖;C.對所述中間碼原始圖進行分解,得到與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖;D.將與Map/Reduce過程的各個執(zhí)行階段對應(yīng)的中間碼階段圖翻譯為Map/Reduce過程的各個執(zhí)行階段的目標代碼。通過上述方式,降低了普通開發(fā)人員的工作難度,提高了代碼的可重用性,有利于代碼的移植和維護。
文檔編號G06F9/44GK102999323SQ201110276309
公開日2013年3月27日 申請日期2011年9月16日 優(yōu)先權(quán)日2011年9月16日
發(fā)明者陳曉鳴, 付力力, 桑文鋒 申請人:北京百度網(wǎng)訊科技有限公司