專利名稱::一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法及裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及分布式數(shù)據(jù)倉庫技術(shù),尤其涉及一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法及裝置。
背景技術(shù):
:數(shù)據(jù)倉庫之父BillInmon對數(shù)據(jù)倉庫的定義為數(shù)據(jù)倉庫(DataWarehouse)是一個(gè)面向主題的(SubjectOriented)、集成的Qntegrated)、相對穩(wěn)定的(Non-Volatile)、反映歷史變化(TimeVariant)的數(shù)據(jù)集合,用于支持管理決策(DecisionMakingSupport)。隨著網(wǎng)絡(luò)的發(fā)展,互聯(lián)網(wǎng)信息呈現(xiàn)爆炸式的增長,互聯(lián)網(wǎng)用戶也越來越龐大,一個(gè)基于互聯(lián)網(wǎng)應(yīng)用數(shù)據(jù)倉庫的數(shù)據(jù)量通常都達(dá)到萬億字節(jié)(TrillionByte,TB)級(jí)別。為了快速處理這些海量數(shù)據(jù),人們提出了分布式數(shù)據(jù)倉庫,分布式數(shù)據(jù)倉庫采用了并行計(jì)算技術(shù),可用于進(jìn)行大規(guī)模數(shù)據(jù)的挖掘和統(tǒng)計(jì),可將以前電信級(jí)別的數(shù)據(jù)倉庫的運(yùn)算速度提高很多倍。基于Hadoop架構(gòu)的分布式數(shù)據(jù)倉庫采用基于谷歌文件系統(tǒng)(GoogleFileSystem,GFS)和映射縮減(MapReduce,MR)技術(shù),GFS系統(tǒng)是一個(gè)可擴(kuò)展的分布式文件系統(tǒng),用于大型的、分布式的、對大量數(shù)據(jù)進(jìn)行訪問的應(yīng)用。MapReduce技術(shù)是一種編程模型,也是一個(gè)處理和生成超大數(shù)據(jù)集的算法模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算,其包括映射(Map)函數(shù)和縮減(Reduce)函數(shù)處理過程,Map函數(shù)用來處理一個(gè)基于鍵值對(keyvaluepair)的數(shù)據(jù)集合,輸出中間的基于鍵值對的數(shù)據(jù)集合,Reduce函數(shù)用來合并所有的具有相同中間key值的中間value值。在對分布式數(shù)據(jù)倉庫進(jìn)行優(yōu)化時(shí),針對計(jì)算均衡性的優(yōu)化是一個(gè)主要目標(biāo),通常查詢引擎利用統(tǒng)計(jì)信息來制定合理的查詢計(jì)劃,解決計(jì)算過程中的不均衡性問題。在采用Hadoop架構(gòu)的分布式數(shù)據(jù)倉庫中提供一種Hive數(shù)據(jù)倉庫工具,該工具可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。Hive現(xiàn)有方案提供了開啟一階段或者兩階段MR的機(jī)制,用戶在提交的HiveQL使用注釋的方式強(qiáng)制要求Hive對提交的HiveQL使用一階段或者兩階段的MR查詢計(jì)劃。但只有非常明確知道需要處理的數(shù)據(jù)分布特征后才能決定是否開啟該選項(xiàng)。對于高達(dá)數(shù)十億條記錄的表而言,在缺乏對表數(shù)據(jù)的全面了解的前提下,要做出正確的決策是及其困難的。如果Map階段輸出的大量Key被推向少數(shù)幾個(gè)節(jié)點(diǎn),可能導(dǎo)致超出這些節(jié)點(diǎn)的處理能力導(dǎo)致任務(wù)運(yùn)行失敗。Map/Reduce計(jì)算過程中由于數(shù)據(jù)自身的不均衡分布也會(huì)導(dǎo)致集群計(jì)算資源不均衡,從而導(dǎo)致無法充分發(fā)揮集群計(jì)算的整體性能。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法及裝置,用于解決分布式數(shù)據(jù)倉庫在執(zhí)行Map/Reduce計(jì)算過程中由于數(shù)據(jù)自身的不均衡分布導(dǎo)致在執(zhí)行結(jié)構(gòu)化查詢語句(SQL)時(shí),集群計(jì)算資源使用不均衡的技術(shù)問題。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法,該方法包括在查詢語句入口插入計(jì)算均衡性入口檢測代碼,通過該計(jì)算均衡性入口檢測代碼獲得執(zhí)行聚集操作的字段值分布情況;若執(zhí)行聚集操作的字段值分布不均衡,則對查詢引擎翻譯的映射縮減(MR)任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作。進(jìn)一步地,獲得執(zhí)行聚集操作的字段值分布情況的方法包括靜態(tài)方式和動(dòng)態(tài)方式;靜態(tài)方式下,計(jì)算均衡性入口檢測代碼直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取所述執(zhí)行聚集操作的字段的字段值分布情況;動(dòng)態(tài)方式下,計(jì)算均衡性入口檢測代碼在MR執(zhí)行過程中對字段值分布規(guī)律進(jìn)行統(tǒng)計(jì),從而獲得相應(yīng)字段值的分布情況。進(jìn)一步地,采用動(dòng)態(tài)方式獲得執(zhí)行聚集操作的字段值分布情況的方法具體為使用第一算子對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并從初始輸入的數(shù)據(jù)中拆解出需要處理的字段;使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;將窗口采樣獲得的數(shù)據(jù)推送給多個(gè)映射器(Mapper),在每個(gè)Mapper上使用第三算子對輸入的字段統(tǒng)計(jì)出常用值,并計(jì)算出直方圖;在縮減(Reduce)處理階段對Mapper輸出的部分統(tǒng)計(jì)值進(jìn)行合并,最終完成所述執(zhí)行聚集操作的字段的全局直方圖的統(tǒng)計(jì)。進(jìn)一步地,增加MR任務(wù)時(shí),所采用的對數(shù)據(jù)進(jìn)行打散的方式為哈希函數(shù)方式或固定步長取余的方式。進(jìn)一步地,在所述分布式數(shù)據(jù)倉庫中增加計(jì)算均衡性開關(guān),用于控制所述計(jì)算均衡性入口檢測代碼是否生效。基于本發(fā)明的方法,本發(fā)明還提出一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的裝置,該裝置應(yīng)用于查詢引擎中,用于在查詢語句入口對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,該裝置包括字段值分布統(tǒng)計(jì)模塊,用于獲得執(zhí)行聚集操作的字段值分布情況;字段值均衡判斷模塊,用于根據(jù)所述執(zhí)行聚集操作的字段值的分布情況判斷字段值分布是否均衡;查詢計(jì)劃優(yōu)化模塊,用于在所述執(zhí)行聚集操作的字段值分布不均衡的情況下,對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作。進(jìn)一步地,所述字段值分布統(tǒng)計(jì)模塊包括靜態(tài)獲取模塊,用于直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取所述執(zhí)行聚集操作的字段的字段值分布情況;動(dòng)態(tài)獲取模塊,用于在MR執(zhí)行過程中對所述執(zhí)行聚集操作的字段的字段值分布規(guī)律進(jìn)行統(tǒng)計(jì),從而獲得其字段值分布情況。進(jìn)一步地,所述動(dòng)態(tài)獲取模塊包括全局統(tǒng)計(jì)模塊,用于使用第一算子對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并從初始輸入的數(shù)據(jù)中拆解出需要處理的字段;采樣模塊,用于使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;局部統(tǒng)計(jì)模塊,用于將窗口采樣獲得的數(shù)據(jù)推送給多個(gè)Mapper,在每個(gè)Mapper上使用第三算子對輸入的字段統(tǒng)計(jì)出常用值,并計(jì)算出直方圖;合并模塊,用于對Mapper輸出的部分統(tǒng)計(jì)值進(jìn)行合并,最終完成所述執(zhí)行聚集操作的字段的全局直方圖的統(tǒng)計(jì)。進(jìn)一步地,所述查詢計(jì)劃優(yōu)化模塊增加MR任務(wù)時(shí),所采用的打散方式為哈希函數(shù)方式或固定步長取余的方式。進(jìn)一步地,所述裝置還包括均衡參數(shù)判斷模塊,用于判斷計(jì)算均衡性開關(guān)是否打開,若所述計(jì)算均衡性開關(guān)打開,則所述裝置生效,否則,所述裝置不生效。本發(fā)明在分布式數(shù)據(jù)倉庫中,將對字段分布情況的感知功能與查詢引擎結(jié)合,對查詢引擎翻譯的MR任務(wù)進(jìn)行調(diào)整,根據(jù)字段值分布情況,進(jìn)行查詢語句的翻譯,通過添加一個(gè)或者多個(gè)MR任務(wù)對數(shù)據(jù)進(jìn)行打散操作,使得數(shù)據(jù)分散更加合理均衡,從而達(dá)到計(jì)算均衡,提高了集群內(nèi)部計(jì)算資源的平均利用,加快了MR任務(wù)的執(zhí)行速度。圖1為本發(fā)明分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法的步驟流程圖;圖2為本發(fā)明采用動(dòng)態(tài)方式獲取相應(yīng)字段值分布情況的流程圖;圖3A-;3B為現(xiàn)有按性別執(zhí)行訪問量分組統(tǒng)計(jì)的MR任務(wù)及執(zhí)行效果圖;圖4為本發(fā)明對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化后的任務(wù)流程圖;圖5為本發(fā)明對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化后的查詢執(zhí)行效果圖;圖6為本發(fā)明對查詢計(jì)劃進(jìn)行優(yōu)化前和優(yōu)化后的對比圖;圖7為本發(fā)明分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的裝置結(jié)構(gòu)示意圖。具體實(shí)施例方式本發(fā)明的基本思想是在SQL的klect語句入口插入計(jì)算均衡性入口檢測代碼,在執(zhí)行聚集操作(GroupBy)時(shí),通過該計(jì)算均衡性入口檢測代碼獲得執(zhí)行聚集操作的字段值分布信息,在所述字段呈不均衡分布的情況下,對查詢引擎翻譯的MR任務(wù)進(jìn)行調(diào)整,通過增加一個(gè)或多個(gè)MR任務(wù)的方式使得計(jì)算資源的使用更加均衡,使處理速度和處理大數(shù)據(jù)集的能力得到了顯著提升。為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下舉實(shí)施例并參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。圖1為本發(fā)明提供的分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法的步驟流程圖,具體步驟如下步驟101、在查詢(Select)語句入口插入計(jì)算均衡性入口檢測代碼,通過該計(jì)算均衡性入口檢測代碼獲得執(zhí)行聚集操作的字段值分布情況;處于兼容性的考慮看,本發(fā)明在分布式數(shù)據(jù)倉庫中新增了計(jì)算均衡性開關(guān)配置參數(shù),用于根據(jù)需要打開或關(guān)閉計(jì)算均衡性入口檢測代碼的功能。例如在Hive中,通過命令行接口打開計(jì)算均衡性開關(guān)。獲得執(zhí)行聚集操作的字段值分布情況可以通過以下兩種方式(1)靜態(tài)方式,該方式下,計(jì)算均衡性入口檢測代碼可直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取相應(yīng)字段值分布情況。該方式主要用于所述字段為非臨時(shí)性字段或表為非臨時(shí)表,且在分布式數(shù)據(jù)倉庫中存儲(chǔ)有該字段值分布情況的表原數(shù)據(jù)的情況。分布式數(shù)據(jù)倉庫在數(shù)據(jù)經(jīng)過數(shù)據(jù)提取、轉(zhuǎn)換和加載(ExtractionTransformationLoading,ETL)集群加載到數(shù)據(jù)倉庫時(shí),可對表中的指定字段進(jìn)行統(tǒng)計(jì)操作,記錄這些字段值分布情況。這些信息作為分布式數(shù)據(jù)倉庫的表元數(shù)據(jù)表保存在分布式數(shù)據(jù)倉庫中,因此,計(jì)算均衡性入口檢測代碼即可直接讀取相應(yīng)的元數(shù)據(jù)信息,由于該方式不需要對鍵值分布情況進(jìn)行動(dòng)態(tài)的統(tǒng)計(jì),所以命名為靜態(tài)方式。(2)動(dòng)態(tài)方式,該方式下,計(jì)算均衡性入口檢測代碼需要?jiǎng)討B(tài)執(zhí)行相應(yīng)字段值分布情況的統(tǒng)計(jì)信息搜集。該方式主要用于處理來自于上一個(gè)MR任務(wù)的數(shù)據(jù)的情況,由于這些數(shù)據(jù)是計(jì)算過程中產(chǎn)生的臨時(shí)數(shù)據(jù),查詢引擎不能靜態(tài)感知其字段值的分布規(guī)律。但是,由于兩個(gè)MR之間存在依賴關(guān)系,當(dāng)前的MR任務(wù)需要等待上一個(gè)MR任務(wù)執(zhí)行結(jié)束,才開始運(yùn)行,待上一次MR任務(wù)執(zhí)行結(jié)束時(shí),分布式數(shù)據(jù)倉庫可以根據(jù)上一次MR任務(wù)收集到相應(yīng)字段值的分布情況,動(dòng)態(tài)決策是否對查詢引擎翻譯的MR任務(wù)進(jìn)行調(diào)整,從而選擇一套最優(yōu)的查詢計(jì)劃,以充分利用計(jì)算資源,達(dá)到計(jì)算均衡。步驟102、判斷執(zhí)行聚集操作的字段值分布情況是否為不均衡分布,若是不均衡分布,則執(zhí)行步驟103;否則,執(zhí)行步驟104;步驟103、當(dāng)執(zhí)行聚集操作的字段值為不均衡分布時(shí),對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作,在新增的MR任務(wù)上進(jìn)行局部統(tǒng)計(jì)和歸并操作,使得計(jì)算均衡分布到計(jì)算資源上。新增的MR任務(wù)通過局部統(tǒng)計(jì)和合并操作使得數(shù)據(jù)量逐級(jí)急劇減少,在每一層MR任務(wù)的縮減器(Reducer)上進(jìn)行歸并統(tǒng)計(jì),最終獲得需要查詢結(jié)果。所述打散的方式可以采用哈希函數(shù)或以固定步長取余的方式使數(shù)據(jù)均衡分散給不同的MR任務(wù)。哈希函數(shù)的原理是構(gòu)建從原字段(Key)到目標(biāo)縮減(ReduceKey)的一個(gè)函數(shù)映射,具體做法是首先將原Key字符串的內(nèi)容轉(zhuǎn)換成ASCII碼,然后用質(zhì)數(shù)因子進(jìn)行權(quán)重配比操作,最后將獲得的數(shù)值等比例縮放到一個(gè)自然數(shù)區(qū)間,該區(qū)間代表了MR集群機(jī)器的代號(hào)數(shù)值。實(shí)踐證明,哈希函數(shù)方式可以有效地將原來字段值分布較為密集的Key映射成密度較低的自然數(shù)分布。該方法在數(shù)據(jù)分布均衡性上更具優(yōu)勢。固定步長取余的原理是對輸入MR的Key進(jìn)行序號(hào)標(biāo)記,假設(shè)集群中的機(jī)器數(shù)目為N,每個(gè)輸入的Key均分配一個(gè)索引值,記為hdex,該索引值根據(jù)輸入的Key數(shù)目進(jìn)行遞增。那么該Key-Value對將分配到標(biāo)號(hào)為(Index模N)的機(jī)器上執(zhí)行計(jì)算,這種方法在計(jì)算速度上更具優(yōu)勢。步驟104、當(dāng)執(zhí)行聚集操作的字段值為均衡分布時(shí),由于查詢引擎翻譯的MR任務(wù)已經(jīng)能夠充分利用計(jì)算資源,所以不需要對查詢引擎翻譯的MR任務(wù)進(jìn)行調(diào)整,按原有方式執(zhí)行即可。圖2為本發(fā)明計(jì)算均衡性入口檢測代碼采用動(dòng)態(tài)方式獲取相應(yīng)字段值分布情況的流程圖,具體步驟如下步驟201、使用第一算子(Operator)對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并根據(jù)指定的統(tǒng)計(jì)信息搜集字段,從初始輸入的數(shù)據(jù)中拆解出需要處理的字段,打包傳送到下一個(gè)操作階段。所述統(tǒng)計(jì)信息包括兩類,一類是表/分區(qū)級(jí)別的統(tǒng)計(jì)信息,一類是字段級(jí)別的統(tǒng)計(jì)信息。表級(jí)/分區(qū)級(jí)別的統(tǒng)計(jì)信息,主要包括記錄數(shù)、使用的磁盤空間、文件數(shù)、文件塊數(shù)等;字段級(jí)別的統(tǒng)計(jì)信息,主要包括字段的平均長度、去重(distinct)值以及字段(key)值的分布情況等。所述第一算子執(zhí)行的操作包括統(tǒng)計(jì)全局的記錄數(shù)目;統(tǒng)計(jì)每條記錄中各個(gè)字段的長度;統(tǒng)計(jì)每條記錄各個(gè)字段的空白記錄數(shù)目等。步驟202、使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;因?yàn)樾枰幚淼臄?shù)據(jù)規(guī)模及其龐大,如果對全部數(shù)據(jù)進(jìn)行統(tǒng)計(jì),既無必要而且實(shí)際應(yīng)用中性能開銷也無法接受,再則通過采樣獲得的樣本數(shù)據(jù)已經(jīng)可以很好地反映全局空間的數(shù)據(jù)分布特征,因此,出于效率和性能上的考慮,本發(fā)明通過對輸入數(shù)據(jù)進(jìn)行窗口采樣的方式來近似地反映相應(yīng)字段的全局空間的數(shù)據(jù)分布特征,以提高執(zhí)行效率。窗口采樣方式可以為首先根據(jù)第一算子的統(tǒng)計(jì)結(jié)果,預(yù)估整張數(shù)據(jù)表的規(guī)模,然后根據(jù)需要進(jìn)行采樣的規(guī)模確定平均采樣步長,采樣命中的記錄則傳播到下一個(gè)階段進(jìn)行直方圖的統(tǒng)計(jì),未命中的記錄則不做處理。步驟203、將窗口采樣獲得的輸入數(shù)據(jù)推送給多個(gè)映射器(Mapper),在每個(gè)Mapper上使用第三算子對輸入的字段(Key)以及對應(yīng)的字段值(Value)統(tǒng)計(jì)出常用值,并計(jì)算出直方圖。在當(dāng)前的Mapper階段結(jié)束后,將對應(yīng)的Key和Value組裝完畢后推送到縮減器(Reducer)端,由Reducer端完成對當(dāng)前字段的全局直方圖統(tǒng)計(jì)。直方圖統(tǒng)計(jì)的結(jié)果包括兩部分一個(gè)浮點(diǎn)值,該值根據(jù)特定區(qū)間確定該字段的分布特征;常用值統(tǒng)計(jì)列表。步驟204、在Reducer端完成對相應(yīng)字段的全局直方圖統(tǒng)計(jì),所述全局直方圖能否反映相應(yīng)字段的全局空間的數(shù)據(jù)分布情況。在Mapper輸出的是每個(gè)域的部分統(tǒng)計(jì)值,這些統(tǒng)計(jì)值將在Reduce階段被合并,最終生成該字段的常用值列表以及分布特征值。這些信息最終被寫到文件中,待以后制定查詢計(jì)劃時(shí)候使用。在MR執(zhí)行過程中對字段值分布規(guī)律進(jìn)行收集的代價(jià)是很小的,因?yàn)镸R框架在任務(wù)執(zhí)行過程中也在收集一些系統(tǒng)信息,可以使用MR框架的Counter機(jī)制獲取字段值的分布fn息ο以下舉一個(gè)典型實(shí)例說明本發(fā)明提出的分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法的執(zhí)行過程。該實(shí)施例中,分布式數(shù)據(jù)倉庫中的表t用于存儲(chǔ)用戶的歷史訪問記錄,該表包含用戶賬號(hào)(id)字段和性別(gender)字段,為了對業(yè)務(wù)系統(tǒng)的訪問量進(jìn)行按性別的分組統(tǒng)計(jì),需要執(zhí)行如下SQLi吾句"selectcount(distinctid)fromtabletgroupbygender”。在不使用本發(fā)明提出的計(jì)算均衡的算法的情況下,這條查詢語句經(jīng)過查詢引擎的翻譯后,形成Map/Reduce任務(wù),如圖3A所示,按照性別(gender)字段,將gender字段值相同的數(shù)據(jù)發(fā)送至相同的Reducer,在同一個(gè)Reducer中,對id字段進(jìn)行去重(Distinct)操作并完成統(tǒng)計(jì)。由于gender字段只有男、女兩個(gè)數(shù)值,該條查詢語句最多只有兩個(gè)Reducer,這樣所有的數(shù)據(jù)將被推送至這兩臺(tái)機(jī)器上進(jìn)行計(jì)算,導(dǎo)致計(jì)算資源利用的不均衡,如果表中的數(shù)據(jù)量非常龐大,推送到Reducer的數(shù)據(jù)量超出這些節(jié)點(diǎn)的處理能力,則會(huì)導(dǎo)致任務(wù)運(yùn)行失敗,圖3B所示為該查詢的執(zhí)行效果。導(dǎo)致該查詢語句執(zhí)行時(shí)計(jì)算不均衡的原因是由于gender字段的不均衡分布導(dǎo)致的,而不均衡的現(xiàn)象是與具體的操作邏輯相關(guān)的,例如同樣的數(shù)據(jù),按照性別進(jìn)行統(tǒng)計(jì)和按照用戶賬號(hào)進(jìn)行統(tǒng)計(jì)是不一樣的。只有按照性別進(jìn)行統(tǒng)計(jì)才會(huì)存在計(jì)算不均衡的問題。由于計(jì)算均衡性是與操作邏輯相關(guān)的現(xiàn)象,因此可以從操作邏輯的層面來規(guī)避計(jì)算不均衡的iH。yI乃MM“selectcount(distinctid)fromtabletgroupbygender"查詢是按照性別進(jìn)行分組統(tǒng)計(jì)id字段去重后的數(shù)量,若表t為非臨時(shí)表,且在分布式數(shù)據(jù)倉庫中存儲(chǔ)有g(shù)ender字段值分布情況的表原數(shù)據(jù),則查詢引擎可采用靜態(tài)方式獲取該字段的字段值分布情況,若表t為臨時(shí)表或gender為臨時(shí)字段,則查詢引擎可采用動(dòng)態(tài)方式獲取該字段的字段值分布情況。由于gender字段只有兩個(gè)取值,該字段值的分布為不均衡分布,因此,按照現(xiàn)有查詢引擎翻譯MR任務(wù)的方式,只會(huì)將t表中的數(shù)據(jù)分為兩組,分別交給兩個(gè)Reducer處理。本發(fā)明通過計(jì)算均衡性入口檢測代碼對原有查詢計(jì)劃進(jìn)行優(yōu)化,如圖4所示,本發(fā)明通過增加一個(gè)Map/Reduce任務(wù),將原有的去重、統(tǒng)計(jì)操作分隔開來首先,對原始數(shù)據(jù)按照id字段的哈希值不同分配到不同的Reducer上進(jìn)行id字段的去重操作,并按照gender計(jì)算出局部的統(tǒng)計(jì)值(如圖4中所示的任務(wù)1);然后,第二個(gè)MR任務(wù)將第一個(gè)MR任務(wù)計(jì)算得來的局部統(tǒng)計(jì)值按照gender字段進(jìn)行歸并統(tǒng)計(jì)操作。由于第一個(gè)MR將數(shù)據(jù)按照id字段進(jìn)行打散,使得計(jì)算比較均衡,并且局部統(tǒng)計(jì)使得數(shù)據(jù)急劇減少,在任務(wù)2中只需要按照gender進(jìn)行統(tǒng)計(jì)即可,不會(huì)存在計(jì)算不均衡的現(xiàn)象,圖5為優(yōu)化后的查詢執(zhí)行效果。圖6為針對該實(shí)施例對查詢計(jì)劃進(jìn)行優(yōu)化前和優(yōu)化后的對比圖,原始的查詢計(jì)劃只包含一個(gè)MR任務(wù),優(yōu)化后的查詢計(jì)劃增加了輸入數(shù)據(jù)的字段值分布情況的判斷步驟,且在字段值分布不均衡的情況下動(dòng)態(tài)增加一個(gè)MR任務(wù),用于執(zhí)行打散操作,已達(dá)到計(jì)算均衡的目的。通過上述實(shí)施例可以看出,本發(fā)明主要通過在查詢引擎翻譯SQL語句階段,根據(jù)執(zhí)行聚集操作字段值的分布情況翻譯出合適的查詢計(jì)劃,通過動(dòng)態(tài)地添加MR任務(wù)對數(shù)據(jù)進(jìn)行打散操作,以達(dá)到計(jì)算的均衡性。圖7為本發(fā)明分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的裝置的結(jié)構(gòu)示意圖,該裝置應(yīng)用于查詢引擎中,用于在查詢語句入口對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,該裝置700包括字段值分布統(tǒng)計(jì)模塊701,用于獲得執(zhí)行聚集操作的字段值分布情況;字段值均衡判斷模塊702,用于根據(jù)所述執(zhí)行聚集操作的字段值的分布情況判斷字段值分布是否均衡;查詢計(jì)劃優(yōu)化模塊703,用于在所述執(zhí)行聚集操作的字段值分布不均衡的情況下,對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作,所采用的打散方式可以為哈希函數(shù)方式或固定步長取余的方式。所述字段值分布統(tǒng)計(jì)模塊701進(jìn)一步包括靜態(tài)獲取模塊,用于直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取所述執(zhí)行聚集操作的字段的字段值分布情況;動(dòng)態(tài)獲取模塊,用于在MR執(zhí)行過程中對所述執(zhí)行聚集操作的字段的字段值分布規(guī)律進(jìn)行統(tǒng)計(jì),從而獲得其字段值分布情況。所述動(dòng)態(tài)獲取模塊進(jìn)一步包括全局統(tǒng)計(jì)模塊,用于使用第一算子對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并從初始輸入的數(shù)據(jù)中拆解出需要處理的字段;采樣模塊,用于使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;局部統(tǒng)計(jì)模塊,用于將窗口采樣獲得的數(shù)據(jù)推送給多個(gè)Mapper,在每個(gè)Mapper上使用第三算子對輸入的字段統(tǒng)計(jì)出常用值,并計(jì)算出直方圖;合并模塊,用于對Mapper輸出的部分統(tǒng)計(jì)值進(jìn)行合并,最終完成所述執(zhí)行聚集操作的字段的全局直方圖的統(tǒng)計(jì)。所述裝置700還進(jìn)一步包括均衡參數(shù)判斷模塊,該模塊用于判斷控制本發(fā)明提供的分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡裝置是否生效的計(jì)算均衡性開關(guān)是否打開,若所述計(jì)算均衡性開關(guān)打開,則所述裝置生效,否則,所述裝置不生效。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明保護(hù)范圍。權(quán)利要求1.一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法,其特征在于,該方法包括在查詢語句入口插入計(jì)算均衡性入口檢測代碼,通過該計(jì)算均衡性入口檢測代碼獲得執(zhí)行聚集操作的字段值分布情況;若執(zhí)行聚集操作的字段值分布不均衡,則對查詢引擎翻譯的映射縮減(MR)任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,獲得執(zhí)行聚集操作的字段值分布情況的方法包括靜態(tài)方式和動(dòng)態(tài)方式;靜態(tài)方式下,計(jì)算均衡性入口檢測代碼直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取所述執(zhí)行聚集操作的字段的字段值分布情況;動(dòng)態(tài)方式下,計(jì)算均衡性入口檢測代碼在MR執(zhí)行過程中對字段值分布規(guī)律進(jìn)行統(tǒng)計(jì),從而獲得相應(yīng)字段值的分布情況。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,采用動(dòng)態(tài)方式獲得執(zhí)行聚集操作的字段值分布情況的方法具體為使用第一算子對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并從初始輸入的數(shù)據(jù)中拆解出需要處理的字段;使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;將窗口采樣獲得的數(shù)據(jù)推送給多個(gè)映射器(Mapper),在每個(gè)Mapper上使用第三算子對輸入的字段統(tǒng)計(jì)出常用值,并計(jì)算出直方圖;在縮減(Reduce)處理階段對Mapper輸出的部分統(tǒng)計(jì)值進(jìn)行合并,最終完成所述執(zhí)行聚集操作的字段的全局直方圖的統(tǒng)計(jì)。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,增加MR任務(wù)時(shí),所采用的對數(shù)據(jù)進(jìn)行打散的方式為哈希函數(shù)方式或固定步長取余的方式。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述分布式數(shù)據(jù)倉庫中增加計(jì)算均衡性開關(guān),用于控制所述計(jì)算均衡性入口檢測代碼是否生效。6.一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的裝置,其特征在于,該裝置應(yīng)用于查詢引擎中,用于在查詢語句入口對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,該裝置包括字段值分布統(tǒng)計(jì)模塊,用于獲得執(zhí)行聚集操作的字段值分布情況;字段值均衡判斷模塊,用于根據(jù)所述執(zhí)行聚集操作的字段值的分布情況判斷字段值分布是否均衡;查詢計(jì)劃優(yōu)化模塊,用于在所述執(zhí)行聚集操作的字段值分布不均衡的情況下,對查詢引擎翻譯的MR任務(wù)進(jìn)行優(yōu)化,增加一個(gè)或多個(gè)MR任務(wù),對數(shù)據(jù)進(jìn)行打散操作。7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述字段值分布統(tǒng)計(jì)模塊包括靜態(tài)獲取模塊,用于直接從數(shù)據(jù)字典表或表元數(shù)據(jù)表中讀取所述執(zhí)行聚集操作的字段的字段值分布情況;動(dòng)態(tài)獲取模塊,用于在MR執(zhí)行過程中對所述執(zhí)行聚集操作的字段的字段值分布規(guī)律進(jìn)行統(tǒng)計(jì),從而獲得其字段值分布情況。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述動(dòng)態(tài)獲取模塊包括全局統(tǒng)計(jì)模塊,用于使用第一算子對輸入數(shù)據(jù)進(jìn)行全局信息統(tǒng)計(jì),并從初始輸入的數(shù)據(jù)中拆解出需要處理的字段;采樣模塊,用于使用第二算子對第一算子處理后的數(shù)據(jù)進(jìn)行窗口采樣;局部統(tǒng)計(jì)模塊,用于將窗口采樣獲得的數(shù)據(jù)推送給多個(gè)Mapper,在每個(gè)Mapper上使用第三算子對輸入的字段統(tǒng)計(jì)出常用值,并計(jì)算出直方圖;合并模塊,用于對Mapper輸出的部分統(tǒng)計(jì)值進(jìn)行合并,最終完成所述執(zhí)行聚集操作的字段的全局直方圖的統(tǒng)計(jì)。9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述查詢計(jì)劃優(yōu)化模塊增加MR任務(wù)時(shí),所采用的打散方式為哈希函數(shù)方式或固定步長取余的方式。10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括均衡參數(shù)判斷模塊,用于判斷計(jì)算均衡性開關(guān)是否打開,若所述計(jì)算均衡性開關(guān)打開,則所述裝置生效,否則,所述裝置不生效。全文摘要本發(fā)明公開了一種分布式數(shù)據(jù)倉庫中實(shí)現(xiàn)計(jì)算均衡的方法及裝置,用于解決分布式數(shù)據(jù)倉庫在執(zhí)行Map/Reduce計(jì)算過程中由于數(shù)據(jù)自身的不均衡分布導(dǎo)致在執(zhí)行SQL查詢時(shí),集群計(jì)算資源使用不均衡的技術(shù)問題。本發(fā)明在分布式數(shù)據(jù)倉庫中,將對字段分布情況的感知功能與查詢引擎結(jié)合,對查詢引擎翻譯的MR任務(wù)進(jìn)行調(diào)整,根據(jù)字段值分布情況,進(jìn)行查詢語句的翻譯,通過添加一個(gè)或者多個(gè)MR任務(wù)對數(shù)據(jù)進(jìn)行打散操作,使得數(shù)據(jù)分散更加合理均衡,從而達(dá)到計(jì)算均衡,提高了集群內(nèi)部計(jì)算資源的平均利用,加快了MR任務(wù)的執(zhí)行速度。文檔編號(hào)G06F17/30GK102479217SQ20101056614公開日2012年5月30日申請日期2010年11月23日優(yōu)先權(quán)日2010年11月23日發(fā)明者李均,洪坤乾,王有為,趙偉,郭瑋申請人:騰訊科技(深圳)有限公司