本發(fā)明涉及電力數(shù)據(jù)查詢技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)查詢的優(yōu)化方法和裝置。
背景技術(shù):
隨著采集系統(tǒng)的建成與完善,電力系統(tǒng)積累了大量的電力數(shù)據(jù),電力大數(shù)據(jù)時(shí)代也隨之到來。如何利用現(xiàn)有的大數(shù)據(jù)分析技術(shù),挖掘電力大數(shù)據(jù)的潛在價(jià)值,為客戶提供更好的服務(wù)是一個(gè)亟需解決的問題。
當(dāng)前,以mapreduce為代表的分布式大數(shù)據(jù)處理框架已成為重要的數(shù)據(jù)處理手段。具體的,mapreduce將數(shù)據(jù)處理操作分成映射(map)和簡(jiǎn)化(reduce)兩個(gè)階段,每個(gè)階段均可利用大量任務(wù)并行處理大規(guī)模數(shù)據(jù),以達(dá)到加速大數(shù)據(jù)分析處理過程的目的。雖然mapreduce使用簡(jiǎn)單且性能優(yōu)越,但其采用了新型的編程模型,難以和基于結(jié)構(gòu)化查詢語言(英文全稱:structuredquerylanguage,英文簡(jiǎn)稱:sql)的傳統(tǒng)數(shù)據(jù)查詢處理平臺(tái)融合。為了使得數(shù)據(jù)處理、分析可以平滑地過渡到電力大數(shù)據(jù)處理時(shí)代,需要采用一種技術(shù)將傳統(tǒng)的sql語言轉(zhuǎn)換為mapreduce作業(yè)。以常用的大數(shù)據(jù)數(shù)據(jù)倉(cāng)庫(kù)hive為例,從sql語句到mapreduce作業(yè)的轉(zhuǎn)換一般經(jīng)歷如下幾個(gè)過程:1、對(duì)sql語句進(jìn)行詞法、語法分析,形成抽象語法樹(英文名稱:asttree);2、對(duì)抽象語法樹進(jìn)行分析,形成查詢的基本單位,查詢子結(jié)構(gòu)(英文名稱:queryblock);3、對(duì)查詢子結(jié)構(gòu)進(jìn)行分析,形成操作樹(英文名稱:operatortree);4、優(yōu)化操作樹,盡量合并冗余操作,以減少作業(yè)數(shù)量;5、遍歷操作樹,將相關(guān)的操作轉(zhuǎn)換為mapreduce任務(wù);6、在基礎(chǔ)設(shè)施上執(zhí)行對(duì)應(yīng)的mapreduce任務(wù)。在上述步驟4對(duì)操作樹進(jìn)行優(yōu)化的過程中,現(xiàn)有研究工作以及系統(tǒng)實(shí)現(xiàn)均側(cè)重于根據(jù)操作樹合并冗余的操作,從而盡可能減少mapreduce任務(wù)的數(shù)量。具體的,如圖1所示,圖1所示操作樹包括:三個(gè)查詢子結(jié)構(gòu)分別對(duì)應(yīng)的mapreduce作業(yè)(job1、job2以及job3),則根據(jù)操作樹合并冗余的操作,且對(duì)三個(gè)查詢子結(jié)構(gòu)分別對(duì)應(yīng)的mapreduce作業(yè)(job1、job2以及job3)合并冗余的操作形成一個(gè)新的mapreduce作業(yè)(job4)。然而上述優(yōu)以減少mapreduce作業(yè)數(shù)量的方法化方案在優(yōu)化過程中沒有考慮mapreduce各作業(yè)的實(shí)際代價(jià),沒有在進(jìn)行定量分析mapreduce作業(yè)代價(jià)后進(jìn)行優(yōu)化,因此不利于提高數(shù)據(jù)的查詢的效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供一種數(shù)據(jù)查詢的優(yōu)化方法和裝置,用于在優(yōu)化操作樹時(shí),充分考慮mapreduce作業(yè)的具體執(zhí)行代價(jià),更合理地根據(jù)mapreduce作業(yè)具體的代價(jià)完成對(duì)查詢操作的優(yōu)化,進(jìn)而提高數(shù)據(jù)的查詢的效率。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
第一方面,提供一種數(shù)據(jù)查詢的優(yōu)化方法,包括:
根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型;
根據(jù)所述查詢的查詢代價(jià)模型計(jì)算操作樹上各個(gè)mapreduce作業(yè)的代價(jià);
獲取mapreduce作業(yè)中的至少一組冗余mapreduce作業(yè);
獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè)。
可選的,所述mapreduce作業(yè)的執(zhí)行流程,包括:
讀取階段,映射函數(shù)從分布式文件系統(tǒng)中讀取數(shù)據(jù);
映射階段,映射函數(shù)執(zhí)行映射運(yùn)算;
結(jié)合階段,將映射階段生成的中間結(jié)果保存在本地磁盤;
哈希階段,所述簡(jiǎn)化函數(shù)從各網(wǎng)絡(luò)節(jié)點(diǎn)的磁盤中讀取所述中間結(jié)果作為簡(jiǎn)化函數(shù)的輸入;
簡(jiǎn)化階段,簡(jiǎn)化函數(shù)執(zhí)行簡(jiǎn)化運(yùn)算;
寫入階段,將簡(jiǎn)化階段的運(yùn)算結(jié)果寫入分布式文件系統(tǒng)。
可選的,所述根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型,包括:
根據(jù)公式一至公式五計(jì)算mapreduce作業(yè)的執(zhí)行流程中讀取階段的代價(jià);
公式一:costread=iocostread+netcostreda+cupcostread
公式二:inputmapsize=splitsize/inputcompressratio;
公式三:iocostread=inputmapsize×hdfsreadtimepersize;
公式四:netcostreda=αinputmapsize×nettimepersize;
公式五:cupcostread=splisize×inuncomprcputimepersize;
其中,costread為讀取階段的代價(jià);為inputmapsize為從分布式系統(tǒng)分布式文件系統(tǒng)中讀取的數(shù)據(jù)的大??;splitsize為讀取的數(shù)據(jù)在分布式文件系統(tǒng)中時(shí)的分片大??;inputcompressratio為讀取的數(shù)據(jù)的壓縮比;iocostread為讀取階段的讀取開銷;hdfsreadtimepersize為在分布式文件系統(tǒng)中讀取單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;netcostreda為讀取階段的網(wǎng)絡(luò)傳輸開銷;α為通過網(wǎng)絡(luò)獲取的數(shù)據(jù)在全部讀取數(shù)據(jù)的占比;nettimepersize為網(wǎng)路傳輸單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;cupcostread為讀取階段的處理器開銷;inuncomprcputimepersize為處理器解壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;
根據(jù)公式六計(jì)算mapreduce作業(yè)的執(zhí)行流程中映射階段的代價(jià);
公式六:cpucostmap=inputmappairs×mapcputimeperpair;
其中,cpucostmap為映射階段的處理器開銷;inputmappairs映射函數(shù)讀取鍵值對(duì)的總數(shù);mapcputimeperpair為映射階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度;
根據(jù)公式七計(jì)算mapreduce作業(yè)的執(zhí)行流程中結(jié)合階段的代價(jià);
公式七:iocostcombine=outmappairs×localwritetimeperpair;
其中,iocostcombine為結(jié)合階段的代價(jià);outmappairs為映射階段生成的鍵值對(duì)的總數(shù);localwritetimeperpair將單位鍵值對(duì)寫入本地磁盤的時(shí)間長(zhǎng)度;
根據(jù)公式八至公式十一計(jì)算mapreduce作業(yè)的執(zhí)行流程中哈希階段的代價(jià);
公式八:costshuffle=iocostshuffle+netcostshuffle+cpucostshuffle;
公式九:iocostshuffle=inputreducepairs×localreadtimeperpair;
公式十:netcostshuffle=inputreducesize×nettimepersize
公式十一:cpucostshuffle=inputreducepairs×hashcputimeperpair;
其中,costshuffle為哈希階段的代價(jià);iocostshuffle為哈希階段的讀寫開銷;inputreducepairs為簡(jiǎn)化函數(shù)從各網(wǎng)絡(luò)節(jié)點(diǎn)的磁盤中讀取的鍵值對(duì)總數(shù);inputreducesize為簡(jiǎn)化函數(shù)從各網(wǎng)絡(luò)節(jié)點(diǎn)的磁盤中讀取數(shù)據(jù)量的大??;localreadtimeperpair為從網(wǎng)絡(luò)節(jié)點(diǎn)中讀取單位鍵值對(duì)的時(shí)間長(zhǎng)度;netcostshuffle哈希階段的網(wǎng)絡(luò)傳輸開銷;nettimeperpair為網(wǎng)絡(luò)傳輸單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;cpucostshuffle為哈希階段處理器的開銷;hashcputimeperpair為哈希階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度;
根據(jù)公式十二計(jì)算mapreduce作業(yè)的執(zhí)行流程中簡(jiǎn)化階段的代價(jià);公式十二:
cpucostreduce=inputreducepairs×reducecputimeperpair;
其中,cpucostreduce為簡(jiǎn)化階段的代價(jià);reducecputimeperpair為簡(jiǎn)化階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度;
根據(jù)公式十三至十六計(jì)算mapreduce作業(yè)的執(zhí)行流程中寫入階段的代價(jià);
公式十三:costwrite=iocostwrite+netcostwrite+cpucostwrite;
公式十四:iocostwrite=outreducesize×hdfswritetimepersize;
公式十五:netcostwrite=outreducesize×nettimepersize;
公式十六:cpucostwrite=inreducepairs×reducecputimeparpair+outreducesize×outcomprcputimepersize;
其中,costwrite為寫入階段的代價(jià);iocostwrite為寫入階段的讀寫開銷;outreducesize為簡(jiǎn)化階段簡(jiǎn)化函數(shù)輸出的數(shù)據(jù)量的大?。籬dfswritetimepersize為將單位數(shù)據(jù)量寫入分布式文件系統(tǒng)的時(shí)間;netcostwrite寫入階段的網(wǎng)絡(luò)傳輸開銷;outcomprcputimepersize為處理器壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度
可選的,所述數(shù)據(jù)庫(kù)中數(shù)據(jù)的分布情況確定通過網(wǎng)絡(luò)獲取的數(shù)據(jù)在全部讀取數(shù)據(jù)的占比。
可選的,所述方法還包括:
通過測(cè)量本地讀寫速度獲取單位數(shù)據(jù)量寫入本地磁盤的時(shí)間長(zhǎng)度以及在本地磁盤中讀取單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;
通過測(cè)量分布式文件系統(tǒng)的讀寫速度獲取單位數(shù)據(jù)量寫入分布式文件系統(tǒng)的時(shí)間長(zhǎng)度以及在分布式文件系統(tǒng)中讀取單位數(shù)據(jù)量的時(shí)間長(zhǎng)度;
通過測(cè)量網(wǎng)絡(luò)傳輸速度獲取網(wǎng)絡(luò)傳輸單位數(shù)據(jù)量的時(shí)間長(zhǎng)度。
可選的,所述方法還包括:
將預(yù)設(shè)數(shù)據(jù)輸入處理器;
分別獲取處理器對(duì)所述預(yù)設(shè)大小的數(shù)據(jù)進(jìn)行壓縮、解壓縮、映射、簡(jiǎn)化以及散列的時(shí)間長(zhǎng)度;
根據(jù)對(duì)預(yù)設(shè)數(shù)據(jù)的大小進(jìn)行壓縮、解壓縮以及與映射階段、哈希階段、簡(jiǎn)化階段相對(duì)的處理的時(shí)間長(zhǎng)度獲取inuncomprcputimepersize、outcomprcputimepersize、mapcputimeperpair、hashcputimeperpair、reducecputimeperpair的值。
可選的,所述獲取mapreduce作業(yè)中的多組冗余mapreduce作業(yè),獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),包括:
將所述操作樹上的查詢子結(jié)構(gòu)建模為無回路有向圖的頂點(diǎn);
獲取各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià);
根據(jù)各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià)獲取無回路有向圖的關(guān)鍵路徑;
根據(jù)關(guān)鍵路徑上的最小代價(jià)對(duì)所述mapreduce作業(yè)進(jìn)行合并獲取新的無回路有向圖;
重復(fù)獲取無回路有向圖的關(guān)鍵路徑、獲取關(guān)鍵路徑上的最小代價(jià)根據(jù)關(guān)鍵路徑上的最小代價(jià)獲取mapreduce作業(yè)進(jìn)行合并獲取新的無回路有向圖,直至操作樹的代價(jià)無法再次減小。
可選的,所述方法還包括:
對(duì)出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)進(jìn)行預(yù)處理獲取對(duì)應(yīng)的最優(yōu)查詢子結(jié)構(gòu);其中,所述最優(yōu)查詢子結(jié)構(gòu)為代價(jià)最小的查詢子結(jié)構(gòu);
將所述最優(yōu)查詢子結(jié)構(gòu)保存在本地?cái)?shù)據(jù)庫(kù);
根據(jù)歷史信息以及所述最優(yōu)查詢子結(jié)構(gòu)對(duì)所述出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)進(jìn)行調(diào)優(yōu)。
可選的,所述根據(jù)歷史信息以及所述最優(yōu)查詢子結(jié)構(gòu)對(duì)所述出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)進(jìn)行調(diào)優(yōu),包括:
從歷史信息中獲取查詢子結(jié)構(gòu)執(zhí)行時(shí)間、當(dāng)前mapreduce執(zhí)行環(huán)境轉(zhuǎn)態(tài)對(duì)所述出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)的執(zhí)行作業(yè)并行度、使用的壓縮算法、使用的散列算法進(jìn)行調(diào)優(yōu)。
第二方面,提供一種數(shù)據(jù)查詢優(yōu)化裝置,其特征在于,所述數(shù)據(jù)查詢優(yōu)化裝置用于根據(jù)第一方面任一項(xiàng)所述的數(shù)據(jù)查詢的優(yōu)化方法進(jìn)行數(shù)據(jù)查詢的優(yōu)化。
本發(fā)明實(shí)施例提供的數(shù)據(jù)查詢優(yōu)化方法和裝置,首先根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型,其次根據(jù)所述查詢的查詢代價(jià)模型計(jì)算操作樹上各個(gè)mapreduce作業(yè)的代價(jià);再次獲取mapreduce作業(yè)中的多組冗余mapreduce作業(yè);最后獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),因?yàn)楸景l(fā)明實(shí)施例在優(yōu)化操作樹時(shí),考慮了mapreduce作業(yè)的具體執(zhí)行代價(jià),并且將每一組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),所以本發(fā)明實(shí)施例可以將操作樹的執(zhí)行代價(jià)優(yōu)化至最小,進(jìn)而提高數(shù)據(jù)的查詢的效率,即本發(fā)明實(shí)施例可以在優(yōu)化操作樹時(shí),充分考慮mapreduce作業(yè)的具體執(zhí)行代價(jià),更合理地根據(jù)mapreduce作業(yè)具體的代價(jià)完成對(duì)查詢操作的優(yōu)化,進(jìn)而提高數(shù)據(jù)的查詢的效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)中對(duì)mapreduce作業(yè)進(jìn)行優(yōu)化的示意圖;
圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)查詢的優(yōu)化方法步驟流程;
圖3為本發(fā)明實(shí)施例提供的mapreduce作業(yè)的執(zhí)行流程圖;
圖4為本發(fā)明實(shí)施例提供的獲取查詢代價(jià)模型參數(shù)的步驟流程圖;
圖5為本發(fā)明實(shí)施例提供的另一數(shù)據(jù)查詢的優(yōu)化方法步驟流程;
圖6為本發(fā)明實(shí)施例提供的操作樹的示意性結(jié)構(gòu)圖;
圖7為本發(fā)明實(shí)施例提供的dag圖的示例性結(jié)構(gòu)圖;
圖8為本發(fā)明實(shí)施例提供的基于dga圖對(duì)mapreduce作業(yè)進(jìn)行合并的示意圖;
圖9為本發(fā)明實(shí)施例提供的數(shù)據(jù)查詢的優(yōu)化方法的示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供一種數(shù)據(jù)查詢的優(yōu)化方法,具體的參照?qǐng)D2所示,該方法包括:
s21、根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型。
具體的,參照?qǐng)D3所示,步驟s21中查詢執(zhí)行計(jì)劃生成的mapreduce作業(yè)的執(zhí)行流程一般包括如下步驟:
s211、讀取(英文名稱:read)階段,映射(英文名稱:map)函數(shù)從分布式文件系統(tǒng)(英文名稱:hadoopdistributedfilesystem,簡(jiǎn)稱:hdfs)中讀取數(shù)據(jù)。
s212、映射階段,映射函數(shù)執(zhí)行映射運(yùn)算。
s213、結(jié)合(英文名稱:combine)階段,將映射階段(步驟s32中)生成的中間結(jié)果保存在本地磁盤。
s214、哈希(英文名稱:shuffle)階段,簡(jiǎn)化(英文名稱:reduce)函數(shù)從各節(jié)點(diǎn)的磁盤中讀取中間結(jié)果作為簡(jiǎn)化函數(shù)的輸入。
s215、簡(jiǎn)化階段,簡(jiǎn)化函數(shù)執(zhí)行簡(jiǎn)化運(yùn)算。
s216、寫入(英文名稱:write)階段,將簡(jiǎn)化階段(步驟s35中)的運(yùn)算結(jié)果寫入分布式文件系統(tǒng)(hdfs)。
s22、根據(jù)查詢代價(jià)模型計(jì)算操作樹上各mapreduce作業(yè)的代價(jià)。
s23、獲取mapreduce作業(yè)中的多組冗余mapreduce作業(yè)。
s24、獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè)。
本發(fā)明實(shí)施例提供的數(shù)據(jù)查詢優(yōu)化方法,首先根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型,其次根據(jù)查詢的查詢代價(jià)模型計(jì)算操作樹上各個(gè)mapreduce作業(yè)的代價(jià);再次獲取mapreduce作業(yè)中的多組冗余mapreduce作業(yè);最后獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),因?yàn)楸景l(fā)明實(shí)施例在優(yōu)化操作樹時(shí),考慮了mapreduce作業(yè)的具體執(zhí)行代價(jià),并且將每一組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),所以本發(fā)明實(shí)施例可以將操作樹的執(zhí)行代價(jià)優(yōu)化至最小,進(jìn)而提高數(shù)據(jù)的查詢的效率,即本發(fā)明實(shí)施例可以在優(yōu)化操作樹時(shí),充分考慮mapreduce作業(yè)的具體執(zhí)行代價(jià),更合理地根據(jù)mapreduce作業(yè)具體的代價(jià)完成對(duì)查詢操作的優(yōu)化,進(jìn)而提高數(shù)據(jù)的查詢的效率。
進(jìn)一步的,上述步驟s21中根據(jù)mapreduce作業(yè)的執(zhí)行流程,建立基于mapreduce的查詢代價(jià)模型具體可以通過如下方式實(shí)現(xiàn):
一、在讀取階段,map函數(shù)從hdfs中讀取數(shù)據(jù)時(shí),其中一部分?jǐn)?shù)據(jù)是通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取的,而另一部數(shù)據(jù)是從本地節(jié)點(diǎn)讀取的。當(dāng)通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)是,該部分?jǐn)?shù)據(jù)既有讀取開銷,又有網(wǎng)絡(luò)傳輸開銷,而從本地節(jié)點(diǎn)讀取數(shù)據(jù)時(shí),只有讀取開銷。因此讀取階段的代價(jià)為通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷、通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)的網(wǎng)絡(luò)傳輸開銷、從本地節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷以及處理處開銷之和。
設(shè)map函數(shù)從hdfs中讀取的數(shù)據(jù)的大小為:inputmapsize,則有通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷與從本地節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷之和為:iocostread=inputmapsize×hdfsreadtimepersize(公式三);
其中,iocostread為通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷與從本地節(jié)點(diǎn)讀取數(shù)據(jù)的讀取開銷之和,即讀取階段的讀取開銷;hdfsreadtimepersize為從hdfs中讀取單位數(shù)據(jù)量的時(shí)間長(zhǎng)度。
設(shè):通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取的數(shù)據(jù)在全部讀取數(shù)據(jù)的占比為α,則有:從通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取的數(shù)據(jù)的大小為:αinputmapsize;
因此讀取階段的網(wǎng)絡(luò)傳輸開銷為:
netcostreda=αinputmapsize×nettimepersize(公式四);
其中,netcostreda為通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)讀取數(shù)據(jù)的網(wǎng)絡(luò)傳輸開銷,即讀取階段的網(wǎng)絡(luò)傳輸開銷;nettimepersize網(wǎng)絡(luò)傳輸單位數(shù)據(jù)量的時(shí)間長(zhǎng)度。
數(shù)據(jù)在hdfs中是以數(shù)據(jù)壓縮包的形式保存的,所以在讀取階段處理器需要對(duì)讀取的數(shù)據(jù)進(jìn)行解壓縮處理,并且數(shù)據(jù)在壓縮前后的大小也會(huì)改變,因此首先需要計(jì)算讀取的數(shù)據(jù)在分布式文件系統(tǒng)中時(shí)的分片大小,然后根據(jù)讀取的數(shù)據(jù)在分布式文件系統(tǒng)中時(shí)的分片大小計(jì)算處理器解壓縮對(duì)讀取的數(shù)據(jù)解進(jìn)行壓縮的時(shí)的開銷。示例性的,處理可以為中處理器(英文名稱:centralprocessingunit,簡(jiǎn)稱:cpu)。
即,根據(jù)公式inputmapsize=splitsize/inputcompressratio(公式二);
計(jì)算讀取的數(shù)據(jù)在分布式文件系統(tǒng)中時(shí)的分片大?。黄渲?,splitsize為讀取的數(shù)據(jù)在分布式文件系統(tǒng)中時(shí)的分片大??;即,inputmapsize在hdfs中以數(shù)據(jù)壓縮包形式存儲(chǔ)時(shí)的大??;inputcompressratio為讀取的數(shù)據(jù)的壓縮比。
然后根據(jù)公式:cupcostread=splisize×inuncomprcputimepersize(公式五)計(jì)算處理器解壓縮讀取的數(shù)據(jù)的開銷;其中cupcostread為讀取階段的處理器開銷;inuncomprcputimepersize為處理器解壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度。
綜上,讀取階段的總開銷,即讀取階段的代價(jià)的計(jì)算公式為:
costread=iocostread+netcostreda+cupcostread(公式一)
二、在映射階段,因?yàn)樵谟成潆A段中沒有從hdfs中讀取數(shù)據(jù)的mapreduce作業(yè),也沒有將數(shù)據(jù)寫入hdfs的mapreduce作業(yè),因此,此階段不存在讀寫開銷,映射階段的代價(jià)即為處理的開銷。映射階段處理器的開銷計(jì)算公式為:
cpucostmap=inputmappairs×mapcputimeperpair(公式六);
其中,其中,cpucostmap為映射階段的處理器開銷;inputmappairs為映射函數(shù)讀取鍵值對(duì)的總數(shù);mapcputimeperpair為映射階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度。
三、在結(jié)合階段,由只需要將映射階段生成的中間結(jié)果保存在本地磁盤中,因此結(jié)合階段只有本地寫入開銷。具體的,結(jié)合階段的本地寫入開銷/結(jié)合階段的代價(jià)的計(jì)算公式為:
iocostcombine=outmappairs×localwritetimeperpair(公式七);
其中,iocostcombine為結(jié)合階段的代價(jià);outmappairs為映射階段生成的鍵值對(duì)的總數(shù);localwritetimeperpair將單位鍵值對(duì)寫入本地磁盤的時(shí)間長(zhǎng)度。
四、哈希階段,reduce函數(shù)從各網(wǎng)絡(luò)節(jié)點(diǎn)磁盤中讀取結(jié)合階段生成的中間結(jié)果,有需要通過網(wǎng)絡(luò)傳輸方式獲取,因此既有讀取開銷又有網(wǎng)絡(luò)傳輸開銷。
其中,哈希階段的讀取開銷的計(jì)算公式為:
iocostshuffle=inputreducepairs×localreadtimeperpair(公式九);
其中,iocostshuffle為哈希階段的讀寫開銷;inputreducepairs為簡(jiǎn)化函數(shù)從各網(wǎng)絡(luò)節(jié)點(diǎn)的磁盤中讀取的鍵值對(duì)總數(shù);localreadtimeperpair為從網(wǎng)絡(luò)節(jié)點(diǎn)中讀取單位鍵值對(duì)的時(shí)間長(zhǎng)度。
在哈希階段,網(wǎng)絡(luò)傳輸開銷的計(jì)算公式為:
netcostshuffle=inputreducesize×nettimeperszie(公式十);
在哈希階段,處理器的開銷的計(jì)算公式為:
其中,netcostshuffle哈希階段的網(wǎng)絡(luò)傳輸開銷。
cpucostshuffle=inputreducepairs×hashcputimeperpair(公式十一);
其中,cpucostshuffle為處理器的開銷;hashcputimeperpair為哈希階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度。
哈希階段的代價(jià)為讀取開銷、網(wǎng)絡(luò)傳輸開銷與處理開銷之和,因此哈希階段的代價(jià)的計(jì)算公式為:
costshuffle=iocostshuffle+netcostshuffle+cpucostshuffle(公式八)
其中,costshuffle為哈希階段的代價(jià)。
五、簡(jiǎn)化階段,由于簡(jiǎn)化階段中執(zhí)行簡(jiǎn)化運(yùn)算,因此在簡(jiǎn)化階段中沒有從讀取數(shù)據(jù)的mapreduce作業(yè),也沒有數(shù)據(jù)寫入的mapreduce作業(yè),同時(shí)也不存在網(wǎng)絡(luò)傳輸開銷。簡(jiǎn)化階段的代價(jià)等于處理的開銷,其計(jì)算公式如下:
cpucostreduce=inputreducepairs×reducecputimeperpair(公式十二);
cpucostreduce為簡(jiǎn)化階段的代價(jià);reducecputimeperpair為簡(jiǎn)化階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度。
六、寫入階段,因?yàn)閷懭腚A段會(huì)將reduce函數(shù)輸出的結(jié)果保存到dhfs中,因此寫入階段的開銷包括寫入開銷和網(wǎng)絡(luò)傳輸開銷,其計(jì)算公式分別如下:
iocostwrite=outreducesize×hdfswritetimepersize(公式十四);
其中,iocostwrite為寫入階段的讀寫開銷;outreducesize為簡(jiǎn)化階段簡(jiǎn)化函數(shù)輸出的數(shù)據(jù)量的大小;hdfswritetimepersize為將單位數(shù)據(jù)量寫入hdfs的時(shí)間。
netcostwrite=outreducesize×nettimepersize(公式十五);
netcostwrite寫入階段的網(wǎng)絡(luò)傳輸開銷。
在此階段中,處理的開銷的計(jì)算公式為:
cpucostwrite=inreducepairs×reducecputimeparpair+
outreducesize×outcomprcputimeperpairs(公式十六);
其中,outcomprcputimepersize為處理器壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度。
寫入階段的代價(jià)等于該階段的讀寫開銷、網(wǎng)絡(luò)傳輸開銷以及處理開銷之和,因此寫入階段的代價(jià)的計(jì)算公式為:
costwrite=iocostwrite+netcostwrite+cpucostwrite(公式十三)。
再進(jìn)一步的,建立基于mapreduce的查詢代價(jià)模型中,仍然存在一些未知參數(shù),為了確定最終的查詢代價(jià)模型,可以通過mapreduce環(huán)境配置、硬件環(huán)境以及數(shù)據(jù)的分布來確定查詢代價(jià)模型中的位置參數(shù)。
第一方面,對(duì)于通過網(wǎng)絡(luò)獲取的數(shù)據(jù)在全部讀取數(shù)據(jù)的占比α,由于與云環(huán)境下利用hive等工具進(jìn)行大數(shù)據(jù)查詢和分析一般是應(yīng)用于數(shù)據(jù)倉(cāng)庫(kù)之上的。在數(shù)據(jù)倉(cāng)庫(kù)中,數(shù)據(jù)的分布一般比較穩(wěn)定,因此可以通過當(dāng)前的數(shù)據(jù)分布情況來確定參數(shù)α。
第二方面,網(wǎng)絡(luò)傳輸開銷、讀寫開銷與具體的硬件設(shè)備相關(guān),且網(wǎng)絡(luò)傳輸開銷、讀寫開銷也比較穩(wěn)定。因此上述查詢代價(jià)模型中的hdfsreadtimepersize、hdfswritetimepersize、locallreadtimeperpair、locallwritetimeperpair以及nettimepersize可以通過測(cè)量hdfs的讀寫速度、本地磁盤的讀寫速度以及網(wǎng)絡(luò)的傳輸速度來確定。
具體的,通過測(cè)量本地磁盤讀寫速度獲取locallreadtimeperpair以及l(fā)ocallwritetimeperpair的值;
通過測(cè)量分布式文件系統(tǒng)的讀寫速度獲取hdfsreadtimepersize以及hdfswritetimepersize的值;
通過測(cè)量網(wǎng)絡(luò)傳輸速度獲取nettimepersize的值。
第三方面,處理開銷與具體的任務(wù)和數(shù)據(jù)集相關(guān)。但是由于以下兩個(gè)原因,我們可以采用預(yù)先計(jì)算的方式獲取該些參數(shù)的具體值:
a)查詢發(fā)生在數(shù)據(jù)倉(cāng)庫(kù)上,數(shù)據(jù)分布較為穩(wěn)定,多次查詢使用的數(shù)據(jù)來源均來自數(shù)據(jù)倉(cāng)庫(kù)。
b)查詢轉(zhuǎn)化后的mapreduce均為查詢子結(jié)構(gòu),均為基本查詢單元,復(fù)雜度與開銷相當(dāng)。
因此,參照?qǐng)D4所示,可以通過如下方法獲取處理器在文件壓縮、文件解壓縮、數(shù)據(jù)映射、數(shù)據(jù)簡(jiǎn)化以及數(shù)據(jù)散列時(shí)的處理速率:
s41、將預(yù)設(shè)大小的數(shù)據(jù)輸入處理器。
s42、分別獲取處理器對(duì)預(yù)設(shè)大小的數(shù)據(jù)進(jìn)行壓縮、解壓縮以及與映射階段、哈希階段、簡(jiǎn)化階段相對(duì)的處理。
s43、根據(jù)對(duì)預(yù)設(shè)數(shù)據(jù)的大小進(jìn)行壓縮、解壓縮以及與映射階段、哈希階段、簡(jiǎn)化階段相對(duì)的處理的時(shí)間長(zhǎng)度獲取inuncomprcputimepersize、outcomprcputimepersize、mapcputimeperpair、hashcputimeperpair、reducecputimeperpair的值。
示例性的,以確定映射階段時(shí)處理器映射單位數(shù)據(jù)量的時(shí)間長(zhǎng)度mapcputimeperpair的值為例對(duì)上述實(shí)施例提供的方法進(jìn)行說明。
首先,根據(jù)查詢子結(jié)構(gòu)編寫一個(gè)用于預(yù)跑的mapreduce任務(wù),并且在等同的基礎(chǔ)設(shè)施上運(yùn)行。該mapreduce作業(yè)的開銷可以根據(jù)任務(wù)執(zhí)行的時(shí)間確定,并且輸入數(shù)據(jù)規(guī)模也是已知的,因此我們可得:
mapcputimeperpair=totaltime/inputpairs;
其中,totaltime為該mapreduce作業(yè)的時(shí)間長(zhǎng)度,inputpairs為輸入鍵值對(duì)的數(shù)量。
進(jìn)一步的,根據(jù)上述方法可以確定處理器解壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度inuncomprcputimepersize、映射階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度mapcputimeperpair、哈希階段處理器處理單位鍵值對(duì)的時(shí)間長(zhǎng)度hashcputimeperpair、簡(jiǎn)化階段處理器處理單位數(shù)據(jù)量的時(shí)間長(zhǎng)度reducecputimeperpair以及處理器壓縮單位數(shù)據(jù)量的時(shí)間長(zhǎng)度outcomprcputimepersize等參數(shù),為避免贅述,此處不再詳細(xì)說明。
進(jìn)一步的,參照?qǐng)D5所示,上述步驟s23和s24中獲取mapreduce作業(yè)中的多組冗余mapreduce作業(yè),獲取每一組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),并將該組冗余mapreduce作業(yè)合并為該組冗余mapreduce作業(yè)中代價(jià)最小的mapreduce作業(yè),包括:
s51、將操作樹上的查詢子結(jié)構(gòu)建模為無回路有向圖(英文名稱:databaseavailabilitygroup,簡(jiǎn)稱:dag)的頂點(diǎn)。
具體的,參照?qǐng)D6、7所示,圖6所示操作樹包括8個(gè)查詢子結(jié)構(gòu),且每一個(gè)查詢子結(jié)構(gòu)分別對(duì)應(yīng)一個(gè)完整的mapreduce作業(yè)(job1至job8),將查詢子結(jié)構(gòu)對(duì)應(yīng)的mapreduce作業(yè)建模為dag的頂點(diǎn),從而將操作樹轉(zhuǎn)化為圖7所示的dag圖。
s52、獲取各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià)。
具體的,由于各查詢子結(jié)構(gòu)均對(duì)應(yīng)一個(gè)完成的mapreduce作業(yè),因此各查詢子結(jié)構(gòu)存在數(shù)據(jù)讀取、數(shù)據(jù)寫入以及處理器處理過程,進(jìn)而可以通過上述查詢代價(jià)模型計(jì)算各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià)。
s53、根據(jù)各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià)獲取無回路有向圖的關(guān)鍵路徑。
s54、根據(jù)關(guān)鍵路徑上的最小代價(jià)對(duì)mapreduce作業(yè)進(jìn)行合并獲取新的無回路有向圖。
示例性的,參照?qǐng)D8所示,圖8所示dag圖包括頂點(diǎn)1至頂點(diǎn)10,其中,頂點(diǎn)1與頂點(diǎn)4之間、頂點(diǎn)4與頂點(diǎn)7之間、頂點(diǎn)7與頂點(diǎn)9之間、頂點(diǎn)9與頂點(diǎn)10之間為dag圖中的關(guān)鍵路徑,圖7中以對(duì)頂點(diǎn)4與頂點(diǎn)7之間的關(guān)鍵路徑為例進(jìn)行說明。對(duì)頂點(diǎn)4與頂點(diǎn)7的mapreduce作業(yè)進(jìn)行合并,生成新的dag圖。
s55、重復(fù)根據(jù)各頂點(diǎn)對(duì)應(yīng)的查詢子結(jié)構(gòu)的代價(jià)獲取無回路有向圖的關(guān)鍵路徑、獲取關(guān)鍵路徑上的最小代價(jià)根據(jù)關(guān)鍵路徑上的最小代價(jià)獲取mapreduce作業(yè)進(jìn)行合并獲取新的無回路有向圖,直至操作樹的代價(jià)無法再次減小。
即,重復(fù)執(zhí)行上述步驟執(zhí)行上述步驟s52、s53以及s54直至操作樹的代價(jià)無法再次減小。
可選的,上述任一實(shí)施例提供的數(shù)據(jù)查詢的優(yōu)化方法還包括:
對(duì)第一查詢子結(jié)構(gòu)進(jìn)行預(yù)處理獲取對(duì)應(yīng)的最優(yōu)查詢子結(jié)構(gòu)。
其中,第一查詢子結(jié)構(gòu)的出現(xiàn)頻率大于閾值,最優(yōu)查詢子結(jié)構(gòu)為第一查詢子結(jié)構(gòu)對(duì)應(yīng)的查詢子結(jié)構(gòu)中代價(jià)最小的查詢子結(jié)構(gòu)。
將最優(yōu)查詢子結(jié)構(gòu)保存在本地?cái)?shù)據(jù)庫(kù);
根據(jù)歷史信息以及最優(yōu)查詢子結(jié)構(gòu)對(duì)出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)進(jìn)行調(diào)優(yōu)。
可選的,根據(jù)歷史信息以及最優(yōu)查詢子結(jié)構(gòu)對(duì)出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)進(jìn)行調(diào)優(yōu),包括:
從歷史信息中獲取查詢子結(jié)構(gòu)執(zhí)行時(shí)間、當(dāng)前mapreduce執(zhí)行環(huán)境轉(zhuǎn)態(tài)對(duì)出現(xiàn)頻率大于閾值的查詢子結(jié)構(gòu)的執(zhí)行作業(yè)并行度、使用的壓縮算法、使用的散列算法進(jìn)行調(diào)優(yōu)。
具體的,對(duì)查詢子結(jié)構(gòu)進(jìn)行調(diào)優(yōu)包括:對(duì)查詢子結(jié)構(gòu)對(duì)應(yīng)的mapreduce任務(wù)的參數(shù)進(jìn)行調(diào)優(yōu)、提高數(shù)據(jù)本地性、通過在線聚集提高數(shù)據(jù)聚集操作的性能等。
具體的,參照?qǐng)D9所示,圖9為本發(fā)明實(shí)施例提供的數(shù)據(jù)查詢優(yōu)化方法的示意圖,本發(fā)明提供的數(shù)據(jù)查詢優(yōu)化方法包括:1、建立查詢代價(jià)模型(計(jì)算讀取階段、映射階段、結(jié)合階段、哈希階段、簡(jiǎn)化階段以及寫入階段的開銷);2、轉(zhuǎn)轉(zhuǎn)化為dag圖并尋找關(guān)鍵路徑,在步驟2的同時(shí)在數(shù)據(jù)庫(kù)中查找最優(yōu)查詢子結(jié)構(gòu);4、對(duì)dag圖進(jìn)行循環(huán)優(yōu)化。
上述實(shí)施例中將將查詢過程中頻繁出現(xiàn)的、基礎(chǔ)的、代價(jià)小的查詢子結(jié)構(gòu)預(yù)存起來,形成最優(yōu)子結(jié)構(gòu)庫(kù),在后續(xù)的查詢執(zhí)行計(jì)劃優(yōu)化時(shí),充分利用預(yù)存的子結(jié)構(gòu)信息進(jìn)行優(yōu)化,從而使得在優(yōu)化過程中效率更高、優(yōu)化結(jié)果更符合實(shí)際情況。
進(jìn)一步的,本法在一實(shí)施例提供一種數(shù)據(jù)查詢優(yōu)化裝置,該數(shù)據(jù)查詢優(yōu)化裝置用于根據(jù)上述任一實(shí)施例提供的數(shù)據(jù)查詢的優(yōu)化方法進(jìn)行數(shù)據(jù)查詢的優(yōu)化。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。