一種大數(shù)據(jù)分布式存儲(chǔ)方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種大數(shù)據(jù)分布式存儲(chǔ)方法和系統(tǒng),該方法包括:將數(shù)據(jù)管理引擎運(yùn)行在主節(jié)點(diǎn)上,對(duì)用戶查詢進(jìn)行編譯、轉(zhuǎn)換和優(yōu)化、生成查詢執(zhí)行計(jì)劃并執(zhí)行,進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān)控;在分布式計(jì)算節(jié)點(diǎn)上運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù);將分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫部署在數(shù)據(jù)節(jié)點(diǎn);將子查詢?cè)跀?shù)據(jù)庫中執(zhí)行或者在分布式計(jì)算框架中執(zhí)行。本發(fā)明增加了將查詢下推到數(shù)據(jù)庫中執(zhí)行的機(jī)會(huì),避免跨節(jié)點(diǎn)連接帶來的數(shù)據(jù)傳輸代價(jià),提高了查詢性能。
【專利說明】一種大數(shù)據(jù)分布式存儲(chǔ)方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及云存儲(chǔ),特別涉及一種大數(shù)據(jù)分布式存儲(chǔ)方法和系統(tǒng)。
【背景技術(shù)】
[0002] 隨著移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等應(yīng)用的飛速發(fā)展,全球數(shù)據(jù)量出現(xiàn)了爆炸式增長。數(shù)據(jù) 量的飛速增長預(yù)示著現(xiàn)在已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代。網(wǎng)絡(luò)運(yùn)營商擁有龐大的用戶,同時(shí)具有 對(duì)終端及用戶上網(wǎng)通道的掌控能力,使得在用戶行為分析方面具有很好的數(shù)據(jù)基礎(chǔ),深入 分析用戶流量行為特征和規(guī)律,發(fā)現(xiàn)用戶潛在消費(fèi)需求,是提升價(jià)值和經(jīng)營水平的有效手 段。然而,不僅僅是數(shù)據(jù)規(guī)模越來越大,而且數(shù)據(jù)類型多和處理實(shí)時(shí)性要求都極大地增加了 大數(shù)據(jù)處理的復(fù)雜度。大數(shù)據(jù)給傳統(tǒng)的數(shù)據(jù)分析處理技術(shù)(例如并行數(shù)據(jù)庫、數(shù)據(jù)倉庫) 帶來的技術(shù)挑戰(zhàn)。傳統(tǒng)數(shù)據(jù)分析處理技術(shù)無法處理大數(shù)據(jù)的高擴(kuò)展性和海量需求;傳統(tǒng)數(shù) 據(jù)分析處理往往只針對(duì)某一種類型數(shù)據(jù)和比較單一,大數(shù)據(jù)具有數(shù)據(jù)量巨大、結(jié)構(gòu)復(fù)雜、類 型眾多等特點(diǎn),這對(duì)大數(shù)據(jù)的存儲(chǔ)、處理與分析提出了新的挑戰(zhàn)。并行數(shù)據(jù)庫的高效性和穩(wěn) 定性成為數(shù)據(jù)分析在性能上的首選。但是基于成本的考慮,隨著云計(jì)算服務(wù)平臺(tái)的普及,將 大規(guī)模數(shù)據(jù)分析任務(wù)從部署在并行數(shù)據(jù)庫的高端服務(wù)器轉(zhuǎn)移至更便宜的無共享體系結(jié)構(gòu) 的低端服務(wù)器集群上,成為當(dāng)下海量數(shù)據(jù)分析真正需要解決的成本瓶頸問題。
[0003] 因此,針對(duì)相關(guān)技術(shù)中所存在的上述問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0004] 為解決上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明提出了一種大數(shù)據(jù)分布式存儲(chǔ)方法, 其特征在于,包括 :
[0005] -種大數(shù)據(jù)分布式存儲(chǔ)方法,用于在云存儲(chǔ)系統(tǒng)中實(shí)現(xiàn)大數(shù)據(jù)的存儲(chǔ)和查詢,所 述云存儲(chǔ)系統(tǒng)包括主節(jié)點(diǎn),分布式計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其特征在于,包括:
[0006] 將數(shù)據(jù)管理引擎運(yùn)行在主節(jié)點(diǎn)上,接收用戶查詢,對(duì)查詢進(jìn)行編譯、轉(zhuǎn)換和優(yōu)化、 生成查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān)控;
[0007] 在分布式計(jì)算節(jié)點(diǎn)上運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù);
[0008] 將分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫部署在數(shù)據(jù)節(jié)點(diǎn),將數(shù)據(jù)表存儲(chǔ)在數(shù) 據(jù)節(jié)點(diǎn)的數(shù)據(jù)庫中,
[0009] 將由用戶查詢轉(zhuǎn)換成的子查詢?cè)跀?shù)據(jù)庫中執(zhí)行,或者在分布式計(jì)算框架中執(zhí)行。
[0010] 優(yōu)選地,所述數(shù)據(jù)表使用二維關(guān)系表結(jié)構(gòu),數(shù)據(jù)表的存儲(chǔ)采用獨(dú)立劃分存儲(chǔ)和組 合劃分存儲(chǔ),其中:
[0011] 在對(duì)表進(jìn)行獨(dú)立劃分時(shí),指定劃分?jǐn)?shù)η、劃分所依據(jù)的劃分鍵屬性列AP以及冗余 系數(shù)k。對(duì)于需要?jiǎng)澐值谋淼拿恳粭l元組,根據(jù)劃分鍵ΑΡ的值計(jì)算出該元組所屬的劃分ID, 然后將該元組存儲(chǔ)到該劃分對(duì)應(yīng)的一個(gè)或者多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫中;
[0012] 如果事實(shí)表A的劃分鍵AP上是表A的外碼,指向維表B的主碼BP即表A的劃分 鍵AP也是表A與表B連接時(shí)使用的連接鍵,則將跨節(jié)點(diǎn)的連接操作轉(zhuǎn)化為本地的連接操作 并下推到數(shù)據(jù)庫中執(zhí)行,此時(shí)將兩個(gè)表的數(shù)據(jù)組合劃分;在對(duì)表進(jìn)行組合劃分時(shí),使用基于 散列的劃分或者基于范圍的劃分,將數(shù)據(jù)劃分為P個(gè)獨(dú)立的劃分,每個(gè)劃分的數(shù)據(jù)存儲(chǔ)在k 個(gè)不同節(jié)點(diǎn)上;若表B依賴于表A進(jìn)行組合劃分,則表B的劃分?jǐn)?shù)等于表A的劃分?jǐn)?shù),且:
[0013] 如果表B的冗余系數(shù)kB等于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)就 是表A相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn);
[0014] 如果表B的冗余系數(shù)kB小于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)是 表B相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)中取前kB個(gè)節(jié)點(diǎn);
[0015] 如果表B的冗余系數(shù)kB大于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)除 了包含表A的相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)之外再進(jìn)行擴(kuò)展,擴(kuò)展的(kB-kA)個(gè)節(jié)點(diǎn)是緊接在原來 的節(jié)點(diǎn)鏈之后的節(jié)點(diǎn)。
[0016] 優(yōu)選地,在將表的元組進(jìn)行獨(dú)立劃分時(shí),利用基于散列的劃分或基于范圍的劃分, 基于散列的劃分在元組劃分鍵AP上應(yīng)用合適的散列函數(shù),得到的散列值再對(duì)劃分?jǐn)?shù)η取 模,即得到元組的劃分ID ;針對(duì)不同的數(shù)據(jù)類型,應(yīng)用不同的散列函數(shù);
[0017] 基于范圍的劃分預(yù)先將屬性列AP的候選值區(qū)間劃分成多個(gè)連續(xù)的范圍,每個(gè)范 圍對(duì)應(yīng)一個(gè)劃分,將元組屬性列AP的值所在范圍作為元組所述的劃分。
[0018] 優(yōu)選地,所述查詢執(zhí)行進(jìn)一步包括:
[0019] 1)用戶通過客戶端提交查詢,數(shù)據(jù)管理引擎接收用戶查詢;
[0020] 2)對(duì)查詢語句進(jìn)行詞法和語法分析,生成語法樹,然后將語法樹轉(zhuǎn)化為標(biāo)準(zhǔn)的關(guān) 系代數(shù)樹,并進(jìn)行語義檢查;
[0021] 將關(guān)系代數(shù)樹轉(zhuǎn)化為邏輯查詢計(jì)劃,并應(yīng)用啟發(fā)式規(guī)則對(duì)其進(jìn)行初步優(yōu)化;
[0022] 根據(jù)代價(jià)模型選擇最優(yōu)的查詢路徑,生成實(shí)際查詢計(jì)劃;
[0023] 將實(shí)際查詢計(jì)劃轉(zhuǎn)化為一個(gè)任務(wù)調(diào)度圖,所述任務(wù)調(diào)度圖中的每個(gè)任務(wù)都是一個(gè) 子查詢,對(duì)應(yīng)一個(gè)分布式計(jì)算任務(wù),每個(gè)任務(wù)必須待其依賴的任務(wù)執(zhí)行完成后才能開始執(zhí) 行;
[0024] 3)調(diào)度和監(jiān)控任務(wù)的執(zhí)行,根據(jù)任務(wù)之間的執(zhí)行依賴關(guān)系將任務(wù)有序提交給分布 式計(jì)算服務(wù)器,并報(bào)告各個(gè)任務(wù)的執(zhí)行狀態(tài),
[0025] 將單個(gè)任務(wù)執(zhí)行后生成的中間結(jié)果或者最終結(jié)果存儲(chǔ)到數(shù)據(jù)庫的表中或者寫入 分布式文件系統(tǒng)中,通過數(shù)據(jù)物化的方式在不同任務(wù)之間實(shí)現(xiàn)輸入輸出數(shù)據(jù)的傳遞;
[0026] 4)將最后生成的結(jié)果返回給用戶中。
[0027] 根據(jù)本發(fā)明的另一方面,提供了一種大數(shù)據(jù)分布式存儲(chǔ)系統(tǒng),包括主節(jié)點(diǎn),分布式 計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其特征在于:
[0028] 所述主節(jié)點(diǎn),用于運(yùn)行數(shù)據(jù)管理引擎,該數(shù)據(jù)管理引擎配置以接收用戶查詢,對(duì)查 詢進(jìn)行編譯、轉(zhuǎn)換和優(yōu)化、生成查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān) 控;
[0029] 所述分布式計(jì)算節(jié)點(diǎn),用于運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù);
[0030] 所述數(shù)據(jù)節(jié)點(diǎn),用于部署分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫,數(shù)據(jù)表存儲(chǔ) 在所述數(shù)據(jù)庫中,
[0031] 其中,由用戶查詢轉(zhuǎn)換成的子查詢?cè)跀?shù)據(jù)庫中執(zhí)行,或者在分布式計(jì)算框架中執(zhí) 行。
[0032] 優(yōu)選地,所述數(shù)據(jù)管理引擎進(jìn)一步包括:
[0033] 元數(shù)據(jù)管理模塊,用于存儲(chǔ)數(shù)據(jù)庫的元數(shù)據(jù)信息,所述元數(shù)據(jù)包括數(shù)據(jù)表的模式、 表數(shù)據(jù)的劃分與存儲(chǔ)方法、數(shù)據(jù)節(jié)點(diǎn)信息;
[0034] 查詢編譯模塊,用于對(duì)用戶提交的查詢進(jìn)行編譯,生成邏輯查詢計(jì)劃;
[0035] 查詢優(yōu)化模塊,用于使用基于規(guī)則和基于代價(jià)的方法對(duì)邏輯查詢計(jì)劃進(jìn)行優(yōu)化, 得到實(shí)際查詢計(jì)劃,然后將其轉(zhuǎn)換成由分布式計(jì)算任務(wù)組成的任務(wù)調(diào)度圖,提交給查詢執(zhí) 行模塊執(zhí)行;
[0036] 查詢執(zhí)行模塊,用于調(diào)度分布式計(jì)算任務(wù),按照各個(gè)任務(wù)的依賴關(guān)系,同步的執(zhí)行 調(diào)度,并監(jiān)控任務(wù)的執(zhí)行狀態(tài),其中每個(gè)任務(wù)只有在它所依賴的所有任務(wù)都執(zhí)行成功后才 能被啟動(dòng);
[0037] 節(jié)點(diǎn)監(jiān)控與負(fù)載平衡模塊,用于定時(shí)輪詢各個(gè)數(shù)據(jù)節(jié)點(diǎn)的狀態(tài),發(fā)現(xiàn)節(jié)點(diǎn)失效后 更新相應(yīng)元數(shù)據(jù),當(dāng)冗余值低于預(yù)定義閾值后,對(duì)數(shù)據(jù)增加新的冗余,定期檢查數(shù)據(jù)分布狀 態(tài),當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)負(fù)載不平衡時(shí)對(duì)數(shù)據(jù)進(jìn)行重新分布。
[0038] 本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
[0039] 提出了結(jié)合數(shù)據(jù)庫和分布式計(jì)算框架的混合數(shù)據(jù)倉庫架構(gòu)。改進(jìn)了大數(shù)據(jù)的分布 式存儲(chǔ)方法,增加了將查詢下推到數(shù)據(jù)庫中執(zhí)行的機(jī)會(huì),避免跨節(jié)點(diǎn)連接帶來的數(shù)據(jù)傳輸 代價(jià)?;陉?duì)列的任務(wù)調(diào)度算法提高了查詢并行度;同時(shí)支持簡約查詢的輕量級(jí)響應(yīng)模式; 具有很好的加載性能、查詢性能和容錯(cuò)能力。
【專利附圖】
【附圖說明】
[0040] 圖1是根據(jù)本發(fā)明實(shí)施例的大數(shù)據(jù)分布式存儲(chǔ)方法的流程圖。
【具體實(shí)施方式】
[0041] 下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描 述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán) 利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié) 以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無這些具體細(xì)節(jié)中 的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實(shí)現(xiàn)本發(fā)明。
[0042] 本發(fā)明的一方面提供了一種大數(shù)據(jù)分布式存儲(chǔ)方法和系統(tǒng)。圖1是根據(jù)本發(fā)明實(shí) 施例的大數(shù)據(jù)分布式存儲(chǔ)方法流程圖。如圖1所示,實(shí)施本發(fā)明的【具體實(shí)施方式】如下:
[0043] 云存儲(chǔ)系統(tǒng)部署在無共享的集群上,使用Hadoop作為計(jì)算層,使用單節(jié)點(diǎn)數(shù)據(jù)庫 作為存儲(chǔ)層,實(shí)現(xiàn)中間件技術(shù)。云存儲(chǔ)系統(tǒng)主要分為三個(gè)部分:主節(jié)點(diǎn)、分布式計(jì)算節(jié)點(diǎn) (Hadoop節(jié)點(diǎn))和數(shù)據(jù)節(jié)點(diǎn)。主節(jié)點(diǎn)上運(yùn)行本發(fā)明的引擎,負(fù)責(zé)接收用戶查詢,對(duì)查詢進(jìn) 行編譯、轉(zhuǎn)換和優(yōu)化、生成查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)還負(fù)責(zé)元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān)控; Hadoop節(jié)點(diǎn)上運(yùn)行Hadoop的服務(wù)器進(jìn)程,負(fù)責(zé)執(zhí)行Hadoop任務(wù);數(shù)據(jù)節(jié)點(diǎn)上部署Hadoop 的工作進(jìn)程,同時(shí)也部署單節(jié)點(diǎn)數(shù)據(jù)庫。數(shù)據(jù)表存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)庫中,用戶查詢將被 轉(zhuǎn)換成若干子查詢,或者在數(shù)據(jù)庫中執(zhí)行,或者使用Hadoop的分布式計(jì)算框架執(zhí)行。
[0044] 根據(jù)本發(fā)明進(jìn)一步的方面,用于管理大數(shù)據(jù)存儲(chǔ)和查詢的數(shù)據(jù)管理引擎提供組件 如下:
[0045] 元數(shù)據(jù)管理模塊。負(fù)責(zé)存儲(chǔ)數(shù)據(jù)庫的元數(shù)據(jù)信息,包括數(shù)據(jù)表的模式、表數(shù)據(jù)的劃 分與存儲(chǔ)方法、數(shù)據(jù)節(jié)點(diǎn)信息等,元數(shù)據(jù)存儲(chǔ)在一個(gè)專門的數(shù)據(jù)庫中。
[0046] 查詢編譯與優(yōu)化模塊。查詢編譯模塊對(duì)用戶提交的查詢進(jìn)行編譯,生成邏輯查詢 計(jì)劃;查詢優(yōu)化模塊使用基于規(guī)則和基于代價(jià)的方法對(duì)邏輯查詢計(jì)劃進(jìn)行優(yōu)化,得到實(shí)際 查詢計(jì)劃,然后將其轉(zhuǎn)換成由Hadoop任務(wù)組成的任務(wù)調(diào)度圖,提交給查詢執(zhí)行模塊執(zhí)行。
[0047] 查詢執(zhí)行模塊。主要任務(wù)是有序地調(diào)度Hadoop任務(wù)。按照各個(gè)任務(wù)的依賴關(guān)系, 同步的執(zhí)行調(diào)度,即每個(gè)任務(wù)只有在它所依賴的所有任務(wù)都執(zhí)行成功后才能被啟動(dòng)。查詢 執(zhí)行模塊負(fù)責(zé)對(duì)任務(wù)進(jìn)行調(diào)度,并監(jiān)控任務(wù)的執(zhí)行狀態(tài)。
[0048] 節(jié)點(diǎn)監(jiān)控與負(fù)載平衡模塊。定時(shí)輪詢各個(gè)數(shù)據(jù)節(jié)點(diǎn)的狀態(tài),發(fā)現(xiàn)節(jié)點(diǎn)失效后及時(shí) 更新相應(yīng)元數(shù)據(jù)。節(jié)點(diǎn)失效會(huì)造成數(shù)據(jù)冗余度下降,當(dāng)冗余值低于預(yù)定義閾值后,負(fù)載平衡 模塊就需要對(duì)數(shù)據(jù)增加新的冗余。負(fù)載平衡模塊還需要定期檢查數(shù)據(jù)分布狀態(tài),當(dāng)發(fā)現(xiàn)節(jié) 點(diǎn)負(fù)載不平衡時(shí)對(duì)數(shù)據(jù)進(jìn)行重新分布。
[0049] 本發(fā)明的數(shù)據(jù)表使用二維關(guān)系表結(jié)構(gòu)來表示實(shí)體以及實(shí)體之間聯(lián)系。關(guān)系表的每 一行代表一個(gè)兀組,每一列稱為一個(gè)屬性。在關(guān)系模型中,無論是實(shí)體還是實(shí)體間的關(guān)系都 使用關(guān)系表來表示。系統(tǒng)存在一個(gè)事實(shí)表和多個(gè)維表,所有維表都直接連接到事實(shí)表上。對(duì) 于存儲(chǔ)大數(shù)據(jù)的表,單個(gè)節(jié)點(diǎn)是無法存儲(chǔ)所有數(shù)據(jù)的,因此必須將數(shù)據(jù)進(jìn)行劃分然后分布 存儲(chǔ)到多個(gè)節(jié)點(diǎn)中。由于數(shù)據(jù)庫中涉及很多事實(shí)表與維表的連接操作,這些連接操作必然 帶來大量的網(wǎng)絡(luò)傳輸。要提高查詢效率,必須考慮如何盡可能減少數(shù)據(jù)的網(wǎng)絡(luò)傳輸,譬如使 連接操作盡可能地在本地節(jié)點(diǎn)執(zhí)行而不需要跨節(jié)點(diǎn)執(zhí)行。
[0050] 本發(fā)明提供兩種數(shù)據(jù)表的存儲(chǔ)方法,包括:
[0051] 1.表的獨(dú)立劃分存儲(chǔ)
[0052] 〃獨(dú)立〃指的是表的大數(shù)據(jù)分布策略不受其他表影響,該方法比較適用于數(shù)據(jù)量 很大的事實(shí)表。對(duì)表進(jìn)行獨(dú)立劃分的時(shí)候需要指定劃分?jǐn)?shù)η、劃分所依據(jù)的劃分鍵屬性列 ΑΡ以及冗余系數(shù)k。對(duì)于需要?jiǎng)澐值谋淼拿恳粭l元組,根據(jù)劃分鍵ΑΡ的值計(jì)算出該元組所 屬的劃分ID,然后將該元組存儲(chǔ)到該劃分對(duì)應(yīng)的一個(gè)或者多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫中。
[0053] 本發(fā)明支持兩種將表的元組進(jìn)行劃分的模式:基于散列的劃分和基于范圍的劃 分?;谏⒘械膭澐衷谠M劃分鍵AP上應(yīng)用合適的散列函數(shù),得到的散列值再對(duì)劃分?jǐn)?shù)η 取模,即得到元組的劃分ID ;
[0054] 基于散列的劃分需要指定散列函數(shù),不合適的散列函數(shù)容易造成分布不均而導(dǎo)致 數(shù)據(jù)傾斜,因此本發(fā)明的系統(tǒng)針對(duì)不同的數(shù)據(jù)類型應(yīng)用不同的散列函數(shù),以盡量避免數(shù)據(jù) 傾斜;
[0055] 基于范圍的劃分預(yù)先將屬性列AP的候選值區(qū)間劃分成多個(gè)連續(xù)的范圍,每個(gè)范 圍對(duì)應(yīng)一個(gè)劃分,將元組屬性列AP的值所在范圍作為元組所述的劃分。基于范圍的劃分通 常比較適用于日期類大數(shù)據(jù),通過將不同時(shí)間范圍的大數(shù)據(jù)分布存儲(chǔ),能有效提高查詢效 率。
[0056] 進(jìn)一步地,本發(fā)明的使用改進(jìn)的鏈?zhǔn)椒植挤▌t對(duì)大數(shù)據(jù)進(jìn)行分布冗余存儲(chǔ)。具體 而言,在擁有η個(gè)節(jié)點(diǎn)的集群中,表A使用劃分方法將大數(shù)據(jù)劃分成p個(gè)劃分,則需要選擇 P個(gè)節(jié)點(diǎn)作為存儲(chǔ)節(jié)點(diǎn),劃分i的數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)i上,而其k個(gè)備份數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)i+1, i+2,···a+k(對(duì)p取模)上。并且只有在節(jié)點(diǎn)i+l,i+2,…,i+k全部同時(shí)失效的情況下, 劃分i的數(shù)據(jù)才會(huì)丟失。
[0057] 2.表的組合劃分存儲(chǔ)
[0058] 獨(dú)立劃分的特點(diǎn)是數(shù)據(jù)表的劃分?jǐn)?shù)和節(jié)點(diǎn)分布不依賴于其他表,是完全獨(dú)立的。 連接操作的代價(jià)很大部分來自于網(wǎng)絡(luò)傳輸。如果事實(shí)表A的劃分鍵AP上正好是事實(shí)表A 的外碼,指向維表B的主碼BP,即表A的劃分鍵AP也是表A與表B連接時(shí)使用的連接鍵,表 A和表B執(zhí)行連接操作的連接條件是AP = BP,那么可以將跨節(jié)點(diǎn)的連接操作轉(zhuǎn)化為本地的 連接操作并下推到數(shù)據(jù)庫中執(zhí)行,只需要將兩個(gè)表的數(shù)據(jù)組合放置。
[0059] 為此,本發(fā)明設(shè)計(jì)了組合劃分,使用基于散列的劃分或者基于范圍的劃分方法將 大數(shù)據(jù)劃分為P個(gè)獨(dú)立的劃分,每個(gè)劃分的數(shù)據(jù)存儲(chǔ)在k個(gè)不同節(jié)點(diǎn)上。但是,〃組合〃即 其大數(shù)據(jù)分布策略依賴于其他的表,因此組合劃分的表的劃分?jǐn)?shù)和大數(shù)據(jù)分布都受到了限 制。若表B依賴于表A進(jìn)行組合劃分,則表B的劃分?jǐn)?shù)等于表A的劃分?jǐn)?shù),且表B的每個(gè)劃 分的存儲(chǔ)節(jié)點(diǎn)都與表A -致。分以下3種情況:
[0060] 1)如果表B的冗余系數(shù)kB等于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié) 點(diǎn)正好就是表A相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)。
[0061] 2)如果表B的冗余系數(shù)kB小于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié) 點(diǎn)是表B相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)中取前kB個(gè)節(jié)點(diǎn)。
[0062] 3)如果表B的冗余系數(shù)kB大于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié) 點(diǎn)除了包含表A的相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)之外,還要再進(jìn)行擴(kuò)展,但是擴(kuò)展的(kB-kA)個(gè)節(jié)點(diǎn) 正好是緊接在原來的節(jié)點(diǎn)鏈之后的節(jié)點(diǎn),形成擴(kuò)展的鏈。
[0063] 可以證明,無論表B的冗余系數(shù)屬于哪種情況,通過組合劃分方法得到的數(shù)據(jù)分 布依然滿足鏈?zhǔn)椒植挤▌t。組合劃分存儲(chǔ)增加了本地連接操作的機(jī)會(huì),盡可能避免跨節(jié)點(diǎn) 連接帶來的數(shù)據(jù)傳輸代價(jià)。連接可方便地下推到數(shù)據(jù)庫中執(zhí)行,利用數(shù)據(jù)庫查詢優(yōu)化技術(shù) 獲得較高的查詢效率。
[0064] 根據(jù)本發(fā)明另一方面,提出了基于上述架構(gòu)和存儲(chǔ)方法的查詢方法。
[0065] 本發(fā)明支持標(biāo)準(zhǔn)SQL語言的子集,支持多個(gè)表的連接操作和常見的聚集函數(shù)譬如 SUM、C〇raT、AVG 等。
[0066] 本發(fā)明的支持簡單的分布式計(jì)算擴(kuò)展,用戶可以定義自己的Map和Reduce函數(shù), 而Mapper的輸入數(shù)據(jù)由本發(fā)明的的底層框架來提供,用戶可以指定Mapper的輸入來自哪 個(gè)表,并指定如何從表中獲取數(shù)據(jù)的SQL語句。
[0067] 根據(jù)本發(fā)明優(yōu)選的實(shí)施例,查詢執(zhí)行過程主要包括以下步驟,分為查詢的提交、編 譯與優(yōu)化、執(zhí)行與返回結(jié)果:
[0068] 1)用戶通過客戶端提交查詢,數(shù)據(jù)管理引擎將查詢交給查詢編譯與優(yōu)化模塊。
[0069] 2)查詢編譯與優(yōu)化模塊分別對(duì)于查詢編譯和查詢優(yōu)化兩個(gè)部分。查詢編譯模塊首 先對(duì)查詢語句進(jìn)行詞法和語法分析,生成語法樹,然后將語法樹轉(zhuǎn)化為標(biāo)準(zhǔn)的關(guān)系代數(shù)樹, 在此過程中還涉及語義檢查,包括檢查表是否存在、數(shù)據(jù)類型是否匹配等。查詢優(yōu)化模塊首 先將關(guān)系代數(shù)樹轉(zhuǎn)化為邏輯查詢計(jì)劃,并應(yīng)用啟發(fā)式規(guī)則對(duì)其進(jìn)行初步優(yōu)化,譬如投影和 選擇謂詞下推,然后根據(jù)代價(jià)模型選擇最優(yōu)的查詢路徑,生成實(shí)際查詢計(jì)劃。實(shí)際查詢計(jì)劃 最后被轉(zhuǎn)化為一個(gè)任務(wù)調(diào)度圖,提交給查詢執(zhí)行模塊執(zhí)行。任務(wù)調(diào)度圖中的每個(gè)任務(wù)都是 一個(gè)子查詢,對(duì)應(yīng)一個(gè)Hadoop任務(wù)。任務(wù)之間存在著執(zhí)行依賴關(guān)系,即每個(gè)任務(wù)必須待其 依賴的任務(wù)執(zhí)行完成后才能開始執(zhí)行,且不能存在循環(huán)依賴,因此任務(wù)調(diào)度圖也是有向無 環(huán)圖。整個(gè)過程中都需要訪問元數(shù)據(jù)庫以獲得各種元數(shù)據(jù)信息。
[0070] 3)查詢執(zhí)行模塊負(fù)責(zé)調(diào)度和監(jiān)控任務(wù)的執(zhí)行,它根據(jù)任務(wù)之間的執(zhí)行依賴關(guān)系將 任務(wù)有序提交給Hadoop服務(wù)器,并報(bào)告各個(gè)任務(wù)的執(zhí)行狀態(tài)。多個(gè)任務(wù)可能并發(fā)執(zhí)行。單 個(gè)任務(wù)執(zhí)行后生成的中間結(jié)果或者最終結(jié)果被存儲(chǔ)到數(shù)據(jù)庫的表中或者寫入Hadoop分布 式文件系統(tǒng)中。不同任務(wù)之間通過數(shù)據(jù)物化的方式實(shí)現(xiàn)輸入輸出數(shù)據(jù)的傳遞。
[0071] 4)最后生成的結(jié)果將會(huì)被返回給用戶,用戶可以選擇終端輸出、存入數(shù)據(jù)庫中。
[0072] 可見,本發(fā)明將底層數(shù)據(jù)庫存儲(chǔ)與上層分布式計(jì)算框架無縫地結(jié)合起來,并靈活 運(yùn)用和組合各種執(zhí)行路徑以獲得最優(yōu)的查詢執(zhí)行方案。
[0073] 在上述任務(wù)調(diào)度圖方面,查詢執(zhí)行模塊得到的任務(wù)調(diào)度圖是一個(gè)有向無環(huán)圖,圖 的節(jié)點(diǎn)就是單個(gè)Hadoop任務(wù),節(jié)點(diǎn)之間的有向邊代表任務(wù)之間的依賴關(guān)系。在調(diào)度任務(wù) 時(shí),既要滿足任務(wù)之間的依賴順序,又要盡量使任務(wù)的執(zhí)行并行化。因?yàn)樵谕粫r(shí)刻,可能 同時(shí)存在多個(gè)可執(zhí)行的任務(wù),這些任務(wù)之間是相互獨(dú)立的,如果串行執(zhí)行則不能充分利用 資源。本發(fā)明優(yōu)選使用基于隊(duì)列的任務(wù)調(diào)度算法,使用5個(gè)隊(duì)列,分別對(duì)應(yīng)任務(wù)的不同狀 態(tài)。最初,所有任務(wù)都在等待隊(duì)列中;執(zhí)行模塊遍歷等待隊(duì)列中的所有的任務(wù),如果存在任 務(wù)的所有依賴的任務(wù)都已經(jīng)執(zhí)行成功,則將其轉(zhuǎn)入就緒隊(duì)列中;就緒隊(duì)列中的任務(wù)將被提 交給Hadoop服務(wù)器并轉(zhuǎn)入運(yùn)行隊(duì)列,提交過程是異步的,即查詢執(zhí)行模塊不會(huì)阻塞等待任 務(wù)完成;執(zhí)行模塊定期檢查運(yùn)行隊(duì)列中各任務(wù)的狀態(tài),如果成功則移入成功隊(duì)列中,失敗則 移入失敗隊(duì)列中;執(zhí)行模塊迭代以上過程,直到所有任務(wù)都執(zhí)行成功或者任何任務(wù)執(zhí)行失 ?。恢挥挟?dāng)所有任務(wù)都執(zhí)行成功后,整個(gè)查詢執(zhí)行才算成功。
[0074] 查詢執(zhí)行的并行性體現(xiàn)在任務(wù)是異步提交的,執(zhí)行模塊不會(huì)因?yàn)榈却蝿?wù)執(zhí)行完 成而阻塞,因此當(dāng)有多個(gè)任務(wù)同時(shí)變?yōu)榭梢詧?zhí)行狀態(tài)時(shí),執(zhí)行模塊幾乎將它們同時(shí)提交給 Hadoop服務(wù)器,這些任務(wù)的執(zhí)行過程將會(huì)重疊并共享資源。
[0075] Hadoop任務(wù)的啟動(dòng)代價(jià)。對(duì)于簡單的查詢,如果按照正常的查詢執(zhí)行過程轉(zhuǎn)化為 Hadoop任務(wù)執(zhí)行,很可能Hadoop任務(wù)的啟動(dòng)時(shí)間占據(jù)查詢整體響應(yīng)時(shí)間的絕大部分。本 發(fā)明提供了另外一種查詢執(zhí)行模式,即輕量級(jí)響應(yīng)模式,面對(duì)SQL的請(qǐng)求服務(wù),應(yīng)用查詢解 釋器,查詢優(yōu)化模塊和查詢執(zhí)行模塊進(jìn)行輕量級(jí)響應(yīng)處理。當(dāng)一個(gè)查詢很簡單而且可以不 使用Hadoop任務(wù)執(zhí)行時(shí),查詢執(zhí)行模塊就會(huì)直接連接各節(jié)點(diǎn)數(shù)據(jù)庫執(zhí)行查詢,然后在本地 將各節(jié)點(diǎn)的結(jié)果合并起來,并進(jìn)行必要的聚集操作,最后將最終結(jié)果返回。這種方式避免了 Hadoop任務(wù)的啟動(dòng)代價(jià),整個(gè)查詢的響應(yīng)時(shí)間大大縮短。
[0076] 根據(jù)本發(fā)明的另一方面,提供了一種大數(shù)據(jù)分布式存儲(chǔ)系統(tǒng),包括主節(jié)點(diǎn),分布式 計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其特征在于:
[0077] 所述主節(jié)點(diǎn),用于運(yùn)行數(shù)據(jù)管理引擎,該數(shù)據(jù)管理引擎配置以接收用戶查詢,對(duì)查 詢進(jìn)行編譯、轉(zhuǎn)換和優(yōu)化、生成查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān) 控;
[0078] 所述分布式計(jì)算節(jié)點(diǎn),用于運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù);
[0079] 所述數(shù)據(jù)節(jié)點(diǎn),用于部署分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫,數(shù)據(jù)表存儲(chǔ) 在所述數(shù)據(jù)庫中,
[0080] 其中,由用戶查詢轉(zhuǎn)換成的子查詢?cè)跀?shù)據(jù)庫中執(zhí)行,或者在分布式計(jì)算框架中執(zhí) 行。
[0081] 優(yōu)選地,所述數(shù)據(jù)管理引擎進(jìn)一步包括:
[0082] 元數(shù)據(jù)管理模塊,用于存儲(chǔ)數(shù)據(jù)庫的元數(shù)據(jù)信息,所述元數(shù)據(jù)包括數(shù)據(jù)表的模式、 表數(shù)據(jù)的劃分與存儲(chǔ)方法、數(shù)據(jù)節(jié)點(diǎn)信息;
[0083] 查詢編譯模塊,用于對(duì)用戶提交的查詢進(jìn)行編譯,生成邏輯查詢計(jì)劃;
[0084] 查詢優(yōu)化模塊,用于使用基于規(guī)則和基于代價(jià)的方法對(duì)邏輯查詢計(jì)劃進(jìn)行優(yōu)化, 得到實(shí)際查詢計(jì)劃,然后將其轉(zhuǎn)換成由分布式計(jì)算任務(wù)組成的任務(wù)調(diào)度圖,提交給查詢執(zhí) 行模塊執(zhí)行;
[0085] 查詢執(zhí)行模塊,用于調(diào)度分布式計(jì)算任務(wù),按照各個(gè)任務(wù)的依賴關(guān)系,同步的執(zhí)行 調(diào)度,并監(jiān)控任務(wù)的執(zhí)行狀態(tài),其中每個(gè)任務(wù)只有在它所依賴的所有任務(wù)都執(zhí)行成功后才 能被啟動(dòng);
[0086] 節(jié)點(diǎn)監(jiān)控與負(fù)載平衡模塊,用于定時(shí)輪詢各個(gè)數(shù)據(jù)節(jié)點(diǎn)的狀態(tài),發(fā)現(xiàn)節(jié)點(diǎn)失效后 更新相應(yīng)元數(shù)據(jù),當(dāng)冗余值低于預(yù)定義閾值后,對(duì)數(shù)據(jù)增加新的冗余,定期檢查數(shù)據(jù)分布狀 態(tài),當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)負(fù)載不平衡時(shí)對(duì)數(shù)據(jù)進(jìn)行重新分布。
[0087] 綜上所述,本發(fā)明提出了結(jié)合數(shù)據(jù)庫和分布式計(jì)算框架的混合數(shù)據(jù)倉庫架構(gòu)。改 進(jìn)了分布式存儲(chǔ)方法,增加了將查詢下推到數(shù)據(jù)庫中執(zhí)行的機(jī)會(huì),避免跨節(jié)點(diǎn)連接帶來的 數(shù)據(jù)傳輸代價(jià)?;陉?duì)列的任務(wù)調(diào)度算法提高了查詢并行度;同時(shí)支持簡約查詢的輕量級(jí) 響應(yīng)模式;具有很好的加載性能、查詢性能和容錯(cuò)能力。
[〇〇88] 顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用 的計(jì)算系統(tǒng)來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算系統(tǒng)上,或者分布在多個(gè)計(jì)算系統(tǒng)所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ) 在存儲(chǔ)系統(tǒng)中由計(jì)算系統(tǒng)來執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。 [〇〇89] 應(yīng)當(dāng)理解的是,本發(fā)明的上述【具體實(shí)施方式】僅僅用于示例性說明或解釋本發(fā)明的 原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何 修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨 在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修 改例。
【權(quán)利要求】
1. 一種大數(shù)據(jù)分布式存儲(chǔ)方法,用于在云存儲(chǔ)系統(tǒng)中實(shí)現(xiàn)大數(shù)據(jù)的存儲(chǔ)和查詢,所述 云存儲(chǔ)系統(tǒng)包括主節(jié)點(diǎn),分布式計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其特征在于,包括: 將數(shù)據(jù)管理引擎運(yùn)行在主節(jié)點(diǎn)上,接收用戶查詢,對(duì)查詢進(jìn)行編譯、轉(zhuǎn)換和優(yōu)化、生成 查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān)控; 在分布式計(jì)算節(jié)點(diǎn)上運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù); 將分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫部署在數(shù)據(jù)節(jié)點(diǎn),將數(shù)據(jù)表存儲(chǔ)在數(shù)據(jù)節(jié) 點(diǎn)的數(shù)據(jù)庫中; 將由用戶查詢轉(zhuǎn)換成的子查詢?cè)跀?shù)據(jù)庫中執(zhí)行,或者在分布式計(jì)算框架中執(zhí)行。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)表使用二維關(guān)系表結(jié)構(gòu),數(shù)據(jù)表 的存儲(chǔ)采用獨(dú)立劃分存儲(chǔ)和組合劃分存儲(chǔ),其中: 在對(duì)表進(jìn)行獨(dú)立劃分時(shí),指定劃分?jǐn)?shù)η、劃分所依據(jù)的劃分鍵屬性列AP以及冗余系數(shù) k。對(duì)于需要?jiǎng)澐值谋淼拿恳粭l元組,根據(jù)劃分鍵ΑΡ的值計(jì)算出該元組所屬的劃分ID,然后 將該元組存儲(chǔ)到該劃分對(duì)應(yīng)的一個(gè)或者多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫中; 如果事實(shí)表A的劃分鍵AP上是表A的外碼,指向維表B的主碼BP即表A的劃分鍵AP 也是表A與表B連接時(shí)使用的連接鍵,則將跨節(jié)點(diǎn)的連接操作轉(zhuǎn)化為本地的連接操作并下 推到數(shù)據(jù)庫中執(zhí)行,此時(shí)將兩個(gè)表的數(shù)據(jù)組合劃分;在對(duì)表進(jìn)行組合劃分時(shí),使用基于散列 的劃分或者基于范圍的劃分,將數(shù)據(jù)劃分為P個(gè)獨(dú)立的劃分,每個(gè)劃分的數(shù)據(jù)存儲(chǔ)在k個(gè)不 同節(jié)點(diǎn)上;若表B依賴于表A進(jìn)行組合劃分,則表B的劃分?jǐn)?shù)等于表A的劃分?jǐn)?shù),且: 如果表B的冗余系數(shù)kB等于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)就是表 A相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn); 如果表B的冗余系數(shù)kB小于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)是表B 相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)中取前kB個(gè)節(jié)點(diǎn); 如果表B的冗余系數(shù)kB大于表A的冗余系數(shù)kA,則表B的每個(gè)劃分的存儲(chǔ)節(jié)點(diǎn)除了包 含表A的相應(yīng)劃分的存儲(chǔ)節(jié)點(diǎn)之外再進(jìn)行擴(kuò)展,擴(kuò)展的(kB-kA)個(gè)節(jié)點(diǎn)是緊接在原來的節(jié) 點(diǎn)鏈之后的節(jié)點(diǎn)。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于: 在將表的元組進(jìn)行獨(dú)立劃分時(shí),利用基于散列的劃分或基于范圍的劃分,基于散列的 劃分在元組劃分鍵AP上應(yīng)用合適的散列函數(shù),得到的散列值再對(duì)劃分?jǐn)?shù)η取模,即得到元 組的劃分ID ;針對(duì)不同的數(shù)據(jù)類型,應(yīng)用不同的散列函數(shù); 基于范圍的劃分預(yù)先將屬性列AP的候選值區(qū)間劃分成多個(gè)連續(xù)的范圍,每個(gè)范圍對(duì) 應(yīng)一個(gè)劃分,將元組屬性列AP的值所在范圍作為元組所述的劃分。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述查詢執(zhí)行進(jìn)一步包括: 1) 用戶通過客戶端提交查詢,數(shù)據(jù)管理引擎接收用戶查詢; 2) 對(duì)查詢語句進(jìn)行詞法和語法分析,生成語法樹,然后將語法樹轉(zhuǎn)化為標(biāo)準(zhǔn)的關(guān)系代 數(shù)樹,并進(jìn)行語義檢查; 將關(guān)系代數(shù)樹轉(zhuǎn)化為邏輯查詢計(jì)劃,并應(yīng)用啟發(fā)式規(guī)則對(duì)其進(jìn)行初步優(yōu)化; 根據(jù)代價(jià)模型選擇最優(yōu)的查詢路徑,生成實(shí)際查詢計(jì)劃; 將實(shí)際查詢計(jì)劃轉(zhuǎn)化為一個(gè)任務(wù)調(diào)度圖,所述任務(wù)調(diào)度圖中的每個(gè)任務(wù)都是一個(gè)子查 詢,對(duì)應(yīng)一個(gè)分布式計(jì)算任務(wù),每個(gè)任務(wù)必須待其依賴的任務(wù)執(zhí)行完成后才能開始執(zhí)行; 3) 調(diào)度和監(jiān)控任務(wù)的執(zhí)行,根據(jù)任務(wù)之間的執(zhí)行依賴關(guān)系將任務(wù)有序提交給分布式計(jì) 算服務(wù)器,并報(bào)告各個(gè)任務(wù)的執(zhí)行狀態(tài), 將單個(gè)任務(wù)執(zhí)行后生成的中間結(jié)果或者最終結(jié)果存儲(chǔ)到數(shù)據(jù)庫的表中或者寫入分布 式文件系統(tǒng)中,通過數(shù)據(jù)物化的方式在不同任務(wù)之間實(shí)現(xiàn)輸入輸出數(shù)據(jù)的傳遞; 4) 將最后生成的結(jié)果返回給用戶中。
5. -種大數(shù)據(jù)分布式存儲(chǔ)系統(tǒng),包括主節(jié)點(diǎn),分布式計(jì)算節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其特征在 于: 所述主節(jié)點(diǎn),用于運(yùn)行數(shù)據(jù)管理引擎,該數(shù)據(jù)管理引擎配置以接收用戶查詢,對(duì)查詢進(jìn) 行編譯、轉(zhuǎn)換和優(yōu)化、生成查詢執(zhí)行計(jì)劃并執(zhí)行查詢,同時(shí)進(jìn)行元數(shù)據(jù)管理和節(jié)點(diǎn)監(jiān)控; 所述分布式計(jì)算節(jié)點(diǎn),用于運(yùn)行服務(wù)器進(jìn)程,執(zhí)行分布式計(jì)算任務(wù); 所述數(shù)據(jù)節(jié)點(diǎn),用于部署分布式計(jì)算的工作進(jìn)程以及單節(jié)點(diǎn)數(shù)據(jù)庫,數(shù)據(jù)表存儲(chǔ)在所 述數(shù)據(jù)庫中, 其中,由用戶查詢轉(zhuǎn)換成的子查詢?cè)跀?shù)據(jù)庫中執(zhí)行,或者在分布式計(jì)算框架中執(zhí)行。
6. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述數(shù)據(jù)管理引擎進(jìn)一步包括: 元數(shù)據(jù)管理模塊,用于存儲(chǔ)數(shù)據(jù)庫的元數(shù)據(jù)信息,所述元數(shù)據(jù)包括數(shù)據(jù)表的模式、表數(shù) 據(jù)的劃分與存儲(chǔ)方法、數(shù)據(jù)節(jié)點(diǎn)信息; 查詢編譯模塊,用于對(duì)用戶提交的查詢進(jìn)行編譯,生成邏輯查詢計(jì)劃; 查詢優(yōu)化模塊,用于使用基于規(guī)則和基于代價(jià)的方法對(duì)邏輯查詢計(jì)劃進(jìn)行優(yōu)化,得到 實(shí)際查詢計(jì)劃,然后將其轉(zhuǎn)換成由分布式計(jì)算任務(wù)組成的任務(wù)調(diào)度圖,提交給查詢執(zhí)行模 塊執(zhí)行; 查詢執(zhí)行模塊,用于調(diào)度分布式計(jì)算任務(wù),按照各個(gè)任務(wù)的依賴關(guān)系,同步的執(zhí)行調(diào) 度,并監(jiān)控任務(wù)的執(zhí)行狀態(tài),其中每個(gè)任務(wù)只有在它所依賴的所有任務(wù)都執(zhí)行成功后才能 被啟動(dòng); 節(jié)點(diǎn)監(jiān)控與負(fù)載平衡模塊,用于定時(shí)輪詢各個(gè)數(shù)據(jù)節(jié)點(diǎn)的狀態(tài),發(fā)現(xiàn)節(jié)點(diǎn)失效后更新 相應(yīng)元數(shù)據(jù),當(dāng)冗余值低于預(yù)定義閾值后,對(duì)數(shù)據(jù)增加新的冗余,定期檢查數(shù)據(jù)分布狀態(tài), 當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)負(fù)載不平衡時(shí)對(duì)數(shù)據(jù)進(jìn)行重新分布。
【文檔編號(hào)】G06F17/30GK104063486SQ201410315506
【公開日】2014年9月24日 申請(qǐng)日期:2014年7月3日 優(yōu)先權(quán)日:2014年7月3日
【發(fā)明者】蒲思羽 申請(qǐng)人:四川中亞聯(lián)邦科技有限公司