欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)查詢的優(yōu)化方法和裝置與流程

文檔序號(hào):11590522閱讀:338來源:國(guó)知局

本發(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)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
闵行区| 房产| 阜新| 湖口县| 日土县| 佛学| 乌恰县| 鲁山县| 三江| 池州市| 新兴县| 深水埗区| 北海市| 枞阳县| 崇左市| 兴海县| 丰顺县| 梁平县| 兴仁县| 射洪县| 罗源县| 望奎县| 蓝田县| 滦平县| 郸城县| 日土县| 中卫市| 武威市| 神池县| 嘉善县| 靖州| 和硕县| 阿拉尔市| 楚雄市| 徐闻县| 本溪市| 宜宾县| 易门县| 临城县| 罗山县| 应城市|