• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向Hive查詢的存儲優(yōu)化技術(shù)

    2022-01-13 05:35:34荊忠航王佳慧馬利民
    關(guān)鍵詞:集群矩陣頻率

    荊忠航,張 偉,2,王佳慧,馬利民,2,徐 濤

    (1.北京信息科技大學(xué) 計算機(jī)學(xué)院,北京 100101;2.北京信息科技大學(xué) 北京材料基因工程高精尖創(chuàng)新中心,北京 100101;3.國家信息中心 信息與網(wǎng)絡(luò)安全部,北京 100045;4.清華大學(xué) 微處理器與片上系統(tǒng)技術(shù)研究中心,北京 100084)

    0 引言

    在Hive底層存儲方面,HDFS(Hadoop distributed file system,Hadoop分布式文件系統(tǒng))將結(jié)構(gòu)化數(shù)據(jù)文件劃分為多個數(shù)據(jù)塊,并將數(shù)據(jù)塊副本順序或隨機(jī)地均勻放置在集群中不同節(jié)點(diǎn)上,這種數(shù)據(jù)塊存儲策略可以使集群具有良好的負(fù)載均衡及容錯性。但是結(jié)構(gòu)化數(shù)據(jù)之間的關(guān)系比較復(fù)雜,數(shù)據(jù)塊之間往往具有一定的關(guān)系,其中,并行關(guān)系和相交關(guān)系是兩種常見的數(shù)據(jù)塊運(yùn)算關(guān)系。在向集群放置數(shù)據(jù)塊的過程中,如果忽略了上述關(guān)系,則會降低查詢?nèi)蝿?wù)的執(zhí)行效率。

    近年來,基于相關(guān)關(guān)系分析的數(shù)據(jù)存儲策略越來越受到學(xué)術(shù)界和工業(yè)界的重視,并取得了一定的研究成果。Cohadoop[1]可以通過配置文件屬性locater將相關(guān)文件關(guān)聯(lián)起來并存儲在同一個節(jié)點(diǎn)上,增強(qiáng)了數(shù)據(jù)本地化程度,減少了運(yùn)算過程中的網(wǎng)絡(luò)傳輸開銷和磁盤,輸入/輸出(input/output,I/O),提高了查詢效率;Hadoop++[2]將協(xié)同劃分(Co-Paritioned)文件或者數(shù)據(jù)保存在定制的Trojan文件中,不需要對HDFS做其他改動,實(shí)現(xiàn)對用戶的透明化。鄭湃等[3]對數(shù)據(jù)集及之間的相關(guān)關(guān)系進(jìn)行分析并建模,通過數(shù)據(jù)集之間的相關(guān)關(guān)系構(gòu)建聚類矩陣并劃分?jǐn)?shù)據(jù)子集,將子集分配到相應(yīng)的節(jié)點(diǎn)上存儲;Yuan等[4]綜合考慮了數(shù)據(jù)之間的相關(guān)性、數(shù)據(jù)與計算節(jié)點(diǎn)之間的相關(guān)程度,提出了同樣采用構(gòu)建聚類矩陣的數(shù)據(jù)放置策略。Agarwal等[5]根據(jù)數(shù)據(jù)本身的特性,提出了一種動態(tài)數(shù)據(jù)放置策略。Wu等[6]根據(jù)用戶上傳文件請求,挖掘出這些文件之間的相關(guān)性,并在初始放置文件時,嘗試把具有相關(guān)性的文件放置在經(jīng)常使用的節(jié)點(diǎn)上。

    本文提出了一種基于相關(guān)關(guān)系分析的數(shù)據(jù)塊優(yōu)化放置策略,通過分析數(shù)據(jù)之間的相關(guān)關(guān)系,構(gòu)建并發(fā)關(guān)系矩陣和相交關(guān)系矩陣,并綜合數(shù)據(jù)塊的訪問頻率,采用優(yōu)化放置方案將數(shù)據(jù)塊存儲在集群中。經(jīng)過實(shí)驗(yàn)對比,相較于默認(rèn)的數(shù)據(jù)塊放置策略,使用基于相關(guān)關(guān)系分析的數(shù)據(jù)塊優(yōu)化放置策略,Hive的查詢效率提升了約10%。

    1 問題分析

    在分布式環(huán)境下,影響Hive集群性能的關(guān)鍵因素有兩個:一是節(jié)點(diǎn)的I/O能力,二是網(wǎng)絡(luò)帶寬。在既定的硬件條件下,如何在任務(wù)運(yùn)行的過程中減少磁盤I/O和網(wǎng)絡(luò)傳輸開銷是提高集群性能的關(guān)鍵問題[7]。

    Hive執(zhí)行查詢?nèi)蝿?wù)依賴于MapReduce,它是一個并行計算框架,將計算任務(wù)部署到集群中的多個甚至所有節(jié)點(diǎn)并發(fā)執(zhí)行,可以充分利用集群的計算資源,提高任務(wù)執(zhí)行效率。

    同時,MapReduce在調(diào)度任務(wù)時會考慮輸入數(shù)據(jù)的位置信息,盡量將任務(wù)調(diào)度在存儲了相關(guān)輸入數(shù)據(jù)的節(jié)點(diǎn)上執(zhí)行。如果上述調(diào)度任務(wù)失敗,MapReduce將嘗試在存儲了相關(guān)輸入數(shù)據(jù)的節(jié)點(diǎn)附近節(jié)點(diǎn)上執(zhí)行任務(wù)[8]。這樣做的目的是在集群上運(yùn)行MapReduce任務(wù)時,大部分輸入數(shù)據(jù)都能在本地讀取,盡量避免移動數(shù)據(jù)帶來的I/O與網(wǎng)絡(luò)傳輸開銷。因此,在執(zhí)行MapReduce任務(wù)的過程中,數(shù)據(jù)本地化程度越高,數(shù)據(jù)傳輸造成的時間浪費(fèi)越少,磁盤I/O和網(wǎng)絡(luò)傳輸開銷也越少[9-10]。

    相較于非結(jié)構(gòu)化數(shù)據(jù),結(jié)構(gòu)化數(shù)據(jù)之間的關(guān)系比較復(fù)雜,數(shù)據(jù)之間具有一定的相關(guān)關(guān)系,同時這種關(guān)系可以映射到相應(yīng)的數(shù)據(jù)塊之間。并發(fā)關(guān)系和相交關(guān)系是結(jié)構(gòu)化數(shù)據(jù)之間經(jīng)常存在的兩種關(guān)系:并發(fā)關(guān)系,即運(yùn)行在這些數(shù)據(jù)塊之上的計算任務(wù)互不影響,可以分布在不同節(jié)點(diǎn)上并發(fā)執(zhí)行;相交關(guān)系,即數(shù)據(jù)塊之間通常做連接或者聯(lián)合查詢。

    在數(shù)據(jù)塊放置的過程中,具有并發(fā)關(guān)系的數(shù)據(jù)塊應(yīng)該盡量分散存放,這樣可以充分利用集群資源,提高任務(wù)的并發(fā)性;具有相交關(guān)系的數(shù)據(jù)塊應(yīng)該存儲于同一個節(jié)點(diǎn)或者相鄰節(jié)點(diǎn),提高數(shù)據(jù)本地化程度,在進(jìn)行連接或者聯(lián)合查詢時,可以減少網(wǎng)絡(luò)傳輸開銷和磁盤I/O,提高查詢效率。

    但是,HDFS默認(rèn)的數(shù)據(jù)塊放置策略是隨機(jī)地將數(shù)據(jù)塊存儲在集群中,這種數(shù)據(jù)塊存儲策略可以使集群具有不錯的負(fù)載均衡及容錯性,但是它忽略了數(shù)據(jù)塊之間的相關(guān)關(guān)系可能會導(dǎo)致如下問題:一是可能會將訪問頻率高且具有并行關(guān)系的數(shù)據(jù)塊存儲在同一節(jié)點(diǎn),導(dǎo)致執(zhí)行查詢?nèi)蝿?wù)的過程中整個集群的壓力集中在有限個節(jié)點(diǎn)上,不能充分利用集群資源;二是可能會將具有相交關(guān)系的數(shù)據(jù)塊存儲在不同節(jié)點(diǎn)或者距離較遠(yuǎn)的節(jié)點(diǎn)上,導(dǎo)致數(shù)據(jù)本地化程度低,在查詢的過程中產(chǎn)生額外的網(wǎng)絡(luò)傳輸開銷和磁盤I/O。上述問題都會降低Hive的查詢效率。

    2 關(guān)系表分區(qū)

    具有相同屬性或相同取值范圍的數(shù)據(jù)可能分散地分布在關(guān)系表中,這種情況下劃分出的數(shù)據(jù)塊之間的關(guān)聯(lián)復(fù)雜度高,增加了分析數(shù)據(jù)塊相關(guān)關(guān)系的難度,不利于構(gòu)建關(guān)系矩陣,本文選取范圍分區(qū)對關(guān)系表進(jìn)行分區(qū)處理。通過范圍分區(qū)將關(guān)系表劃分為多個子表,每個子表中關(guān)鍵列的數(shù)據(jù)具有相同的屬性或者取值范圍。通過范圍分區(qū),有效降低了數(shù)據(jù)塊之間關(guān)聯(lián)復(fù)雜度,有利于分析數(shù)據(jù)塊之間的相關(guān)關(guān)系。

    基于范圍分區(qū)的關(guān)系表劃分過程如下:

    1)根據(jù)數(shù)據(jù)集D上的歷史查詢命令統(tǒng)計結(jié)果及用戶查詢習(xí)慣選取關(guān)鍵列,得到關(guān)鍵列集合K={K0,K1,K2,…,Kn-1},n為關(guān)鍵列的數(shù)量。

    2)為每個關(guān)鍵列劃定分區(qū)范圍,關(guān)鍵列Ki的分區(qū)范圍為{Fi0,F(xiàn)i1,…Fi(mi-1)},F(xiàn)為每個關(guān)鍵列的取值范圍,mi為關(guān)鍵列Ki分區(qū)數(shù),0≤i≤n-1。

    關(guān)系表分區(qū)后子表數(shù)量t為:

    (1)

    關(guān)系表分區(qū)過程如圖1所示。

    圖1 關(guān)系表分區(qū)過程

    3)將t個子表劃分到s(s≥1)個數(shù)據(jù)塊中,由于每個子表文件的大小可能與HDFS的數(shù)據(jù)塊大小(默認(rèn)為128 MB)不一致,因此需要將子表文件進(jìn)行拆分整合。第j(0≤j≤t-1)個子表文件處理流程如圖2所示。

    圖2 子表文件拆分整合流程

    如果子表文件容量小于數(shù)據(jù)塊的大小,則不做任何拆分處理,將該子表文件與其他小于數(shù)據(jù)塊大小的子表文件合并。如果合并后新的子表文件依然小于數(shù)據(jù)塊,則繼續(xù)等待合并,直到新的子表文件與數(shù)據(jù)塊大小保持一致。

    如果子表文件的大小不小于數(shù)據(jù)塊,則對子表文件做拆分處理。如果子表文件的大小為數(shù)據(jù)塊的整數(shù)倍,則將子表文件劃分為K個數(shù)據(jù)塊:

    K=S÷128

    (2)

    式中S為子表文件的大小,單位為MB。

    如果子表文件大小不是數(shù)據(jù)塊的整數(shù)倍,則需要將子表文件拆分為K個數(shù)據(jù)塊和一個不大于數(shù)據(jù)塊的子表:

    K=floor(S÷128)

    (3)

    式中floor()為向下取整。

    對子表文件執(zhí)行文件合并操作。

    4)子表文件劃分后的數(shù)據(jù)塊集合為D={D0,D1,D2,…,Ds-1},經(jīng)過上述的拆分整合,子表文件與數(shù)據(jù)塊無法形成一一對應(yīng)的關(guān)系,為了更方便統(tǒng)計數(shù)據(jù)塊之間的相關(guān)關(guān)系及構(gòu)建關(guān)系矩陣,需要建立元數(shù)據(jù)表來描述子表文件與數(shù)據(jù)塊之間的映射關(guān)系,D的元數(shù)據(jù)表如表1所示。元數(shù)據(jù)表包含2個字段:子表文件、數(shù)據(jù)塊。

    表1 元數(shù)據(jù)表

    根據(jù)子表文件和數(shù)據(jù)塊之間的映射關(guān)系表,可以很容易地定位子表文件的數(shù)據(jù)所在的數(shù)據(jù)塊。

    假設(shè)s個數(shù)據(jù)塊D={D0,D1,D2,…,Ds-1}需要存儲在集群中的q(s≥q)個節(jié)點(diǎn)上:O={O0,O1,O2,…,Oq-1}。接下來需要根據(jù)關(guān)系表的查詢命令集以及映射關(guān)系表構(gòu)建關(guān)系矩陣,并通過優(yōu)化放置方案將s個數(shù)據(jù)塊放置在q個節(jié)點(diǎn)上。

    3 關(guān)系矩陣構(gòu)建

    3.1 運(yùn)算關(guān)系分析

    在Hive中執(zhí)行SQL命令時,數(shù)據(jù)之間存在3種運(yùn)算關(guān)系:

    1)并發(fā)關(guān)系。運(yùn)行在數(shù)據(jù)之上的計算任務(wù)之間互不影響,數(shù)據(jù)和操作之間不存在交集,可以在集群中的不同節(jié)點(diǎn)上并發(fā)執(zhí)行,通過符號∪表示。

    2)相交關(guān)系。運(yùn)行在數(shù)據(jù)之上的計算任務(wù)之間相互影響,數(shù)據(jù)和操作之間存在交集,例如數(shù)據(jù)塊之間需要進(jìn)行join或者聯(lián)合查詢,位于不同節(jié)點(diǎn)之間的數(shù)據(jù)塊需要通過網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的傳輸,以完成相應(yīng)的計算任務(wù),通過符號∩表示。

    3)獨(dú)立關(guān)系。將滿足SQL語句中Where條件的數(shù)據(jù)塊與被過濾掉的數(shù)據(jù)塊之間的關(guān)系稱為獨(dú)立關(guān)系,通過符號φ表示。

    分析數(shù)據(jù)塊Di、Dj之間的關(guān)系:

    (4)

    式中0≤i

    3.2 構(gòu)建并發(fā)關(guān)系矩陣

    給定數(shù)據(jù)集D下的一個SQL命令集合:

    Q={Q0,Q1,Q2,…,Qp-1}p≥1

    并發(fā)關(guān)系矩陣和相交關(guān)系矩陣可以清楚地描述Q下數(shù)據(jù)塊之間的相關(guān)關(guān)系,同時有利于分析數(shù)據(jù)塊之間的并發(fā)度θ和相交度ε。基于建立好的關(guān)系矩陣,通過優(yōu)化放置方案綜合考慮數(shù)據(jù)塊之間的相關(guān)度,并放置數(shù)據(jù)塊,可以提高給定查詢命令集Q下的查詢效率。

    首先根據(jù)Q中Qi(0≤i

    Di={D0,D1,D2,…,Dr} 0≤r

    遍歷集合Q中的所有命令,得到集合V:

    V={D0,D1,D2,…,Dx} 0≤x

    根據(jù)每條查詢命令Qi的子命令序列得到Di中數(shù)據(jù)塊之間的運(yùn)算關(guān)系集。

    以某新零售大數(shù)據(jù)平臺中的查詢命令集為例,其中的一條SQL命令如下:

    統(tǒng)計prediction_target表中名稱包含“GSHBSCN”的售貨機(jī)的每一件商品在2018年5月1日至2019年12月1日每天的銷量:

    SELECT a.merc_id,a.date,b.order_number FROM prediction_target a LEFT OUTER JOIN all_in_one b ON a.date= b.record_date AND a.vem_id=b.vem_id AND a.merc_id = b.merc_id WHERE a.vem_id like ′GSHBSCN%′ AND a.date>=′2018-05-01′ AND a.date<=′2019-12-01′;

    該命令需要在prediction_target和all_in_one兩個表之間做join查詢,兩表劃分出的數(shù)據(jù)塊集合D={D0,D1,D2,…,D10}。

    根據(jù)該命令的Where條件中date等關(guān)鍵列的邊界值{′GSHBSCN′,′2018-05-01′,′2019-12-01′}可以定位到相應(yīng)的數(shù)據(jù)塊,即T={D3,D4,D6,D7,D8,D9},然后根據(jù)該指令的子命令序列得到數(shù)據(jù)塊之間的運(yùn)算關(guān)系表達(dá)式:

    (D3∩D7)∪((D4∪D6)∩D9)∪D8

    根據(jù)運(yùn)算關(guān)系表達(dá)式可以分解出并發(fā)關(guān)系集合

    ((D3,D4),(D3,D6),(D3,D9),(D3,D8),(D7,D4),(D7,D6),(D7,D9),(D7,D8),(D4,D6),(D4,D8),(D6,D8))

    和相交關(guān)系集合:

    ((D3,D7),(D4,D9),(D6,D9))

    分析查詢命令集中的所有指令的運(yùn)算關(guān)系,并推算出運(yùn)算關(guān)系表達(dá)式,如表2所示。

    表2 查詢命令集運(yùn)算關(guān)系表達(dá)式集合

    每條指令相應(yīng)的并發(fā)關(guān)系集合如表3所示。

    表3 Qnls并發(fā)關(guān)系集合

    根據(jù)表中的運(yùn)算關(guān)系表達(dá)式集合,構(gòu)建并發(fā)關(guān)系矩陣。

    查詢命令集合Q下,由s個數(shù)據(jù)塊D={D0,D1,D2,…,Ds-1}構(gòu)建的并發(fā)關(guān)系矩陣是一個s行s列的對稱矩陣,矩陣中非對角線的元素Pij為第i個數(shù)據(jù)塊與第j個數(shù)據(jù)塊的并發(fā)度θ,即第i個數(shù)據(jù)塊在Q的運(yùn)算關(guān)系表達(dá)式中出現(xiàn)的次數(shù)。

    并發(fā)度θ代表著兩個數(shù)據(jù)塊之間在查詢命令集Q下并發(fā)執(zhí)行的頻率,定義如下:假設(shè)第i個數(shù)據(jù)塊與第j個數(shù)據(jù)塊的并發(fā)關(guān)系在Q的并發(fā)關(guān)系集合下出現(xiàn)的次數(shù)為c,則:

    Pij=Pji=θ=c×R(Di,Dj)

    (5)

    式中R(Di,Dj)=1且i≠j。

    某新零售大數(shù)據(jù)平臺中的查詢命令集合下,數(shù)據(jù)塊的并發(fā)關(guān)系矩陣如圖3所示。

    圖3 數(shù)據(jù)塊并發(fā)關(guān)系矩陣

    3.3 構(gòu)建相交關(guān)系矩陣

    在3.2節(jié)某新零售大數(shù)據(jù)平臺中的查詢命令集合中,每條指令相應(yīng)的相交關(guān)系集合如表4所示。

    表4 相交關(guān)系集合

    查詢命令集合Q下,由s個數(shù)據(jù)塊D={D0,D1,D2,…,Ds-1}構(gòu)建的相交關(guān)系矩陣是一個s行s列的方陣且是一個對稱矩陣,矩陣中非對角線的元素Iij為第i個數(shù)據(jù)塊與第j個數(shù)據(jù)塊的相交度ε。

    相交度ε代表著兩個數(shù)據(jù)塊之間在查詢命令集Q下相交查詢的頻率,定義如下:假設(shè)第i個數(shù)據(jù)塊與第j個數(shù)據(jù)塊的相交關(guān)系在Q的相交關(guān)系集合下出現(xiàn)的次數(shù)為c,則:

    Iij=Iji=ε=c×R(Di,Dj)

    (6)

    式中R(Di,Dj)=-1且i≠j。

    在3.2節(jié)某新零售大數(shù)據(jù)平臺中的查詢命令集合下,數(shù)據(jù)塊的相交關(guān)系矩陣如圖4所示。

    圖4 數(shù)據(jù)塊相交關(guān)系矩陣

    4 數(shù)據(jù)塊優(yōu)化放置方案

    4.1 統(tǒng)計目標(biāo)數(shù)據(jù)塊訪問頻率

    在數(shù)據(jù)塊放置的過程中,如果忽略數(shù)據(jù)塊的訪問頻率,可能會導(dǎo)致熱點(diǎn)問題,即經(jīng)常被訪問的數(shù)據(jù)塊有可能被存放在同一節(jié)點(diǎn)上,導(dǎo)致集群的工作壓力集中在某幾個節(jié)點(diǎn)上,無法充分利用集群資源,同時給Hive的數(shù)據(jù)查詢帶來負(fù)面的影響。

    為了防止數(shù)據(jù)熱點(diǎn),在數(shù)據(jù)塊優(yōu)化放置方案中,將數(shù)據(jù)塊的訪問頻率作為重要的參數(shù)。

    計算目標(biāo)數(shù)據(jù)塊Dn的訪問頻率時,首先統(tǒng)計查詢命令集Q中包含該目標(biāo)數(shù)據(jù)塊的SQL語句,得到包含h(0≤h≤q)個元素的集合:

    M={Qn1,Qn2,…,Qnh}

    然后在用戶歷史查詢記錄中統(tǒng)計M中的每一條語句的執(zhí)行頻率fi(0≤i≤h)。

    最后計算目標(biāo)數(shù)據(jù)塊Dn在查詢命令集Q下的訪問頻率:

    (7)

    因此,目標(biāo)數(shù)據(jù)塊集合D={D0,D1,D2,…,Ds-1}在查詢命令集Q下存在對應(yīng)的訪問頻率集合:

    F={F0,F1,F2,…,F(xiàn)s-1}

    目標(biāo)數(shù)據(jù)塊訪問頻率存放在數(shù)據(jù)庫的訪問頻率表中,有兩個字段:目標(biāo)數(shù)據(jù)塊和訪問頻率。該表保存集合D中的數(shù)據(jù)塊訪問頻率如表5所示。

    表5 訪問頻率表

    4.2 優(yōu)化放置方案

    并發(fā)關(guān)系矩陣元素Pij和相交關(guān)系矩陣元素Iij描述了數(shù)據(jù)塊之間的并發(fā)程度和相交程度,在將數(shù)據(jù)塊放置在集群的過程中根據(jù)關(guān)系矩陣綜合考慮數(shù)據(jù)塊之間的相關(guān)關(guān)系,選擇合適的節(jié)點(diǎn)存儲數(shù)據(jù)塊。

    假設(shè)s個數(shù)據(jù)塊D={D0,D1,D2,…,Ds-1}需要存儲在集群中q(s≥q)個節(jié)點(diǎn)上,節(jié)點(diǎn)的集合為

    O={O0,O1,O2,…,Oq-1}。

    定義q個集合T0、T1、T2、…、Tq-1、Ti為放置在節(jié)點(diǎn)Oi上的數(shù)據(jù)塊集合?;谙嚓P(guān)關(guān)系分析的數(shù)據(jù)塊優(yōu)化放置方案步驟如下:

    1)在集合D中順序取出q個數(shù)據(jù)塊,放置在集合數(shù)據(jù)塊緩存集合中。

    2)在數(shù)據(jù)塊緩存集合中取出第一個待放置數(shù)據(jù)塊,放置在任意一個T中。

    3)在數(shù)據(jù)塊緩存集合中取出下一個待放置數(shù)據(jù)塊Dt(0≤t≤s),計算Dt與每一個T集合的β值和φ值。

    設(shè)βi為待放置數(shù)據(jù)塊與Ti={Di0,Di1,Di2,…,Dij}(0≤i≤q,0≤j≤s)中的數(shù)據(jù)塊并發(fā)度之和:

    (8)

    設(shè)φi為待放置數(shù)據(jù)塊與Ti中的數(shù)據(jù)塊相交度之和:

    (9)

    如果Ti=φ,則βi=0,φi=0。

    4)計算待放置數(shù)據(jù)塊Dt與每一個T集合的α值:

    αi=βi+φi

    (10)

    式中0≤i≤q。

    α值反映了待放置數(shù)據(jù)塊與T集合的相關(guān)程度。如果α的值為正,則代表Dt與T集合中的數(shù)據(jù)塊主要為并發(fā)關(guān)系;如果α的值為負(fù),則代表Dt與T集合中的數(shù)據(jù)塊主要為相交關(guān)系;如果α的值為0,則代表T集合中無數(shù)據(jù)塊或Dt與T集合具有同等的并發(fā)度和相交度。且α越小代表Dt與T集合的并發(fā)度和相交度越接近。

    5)計算μ值。

    μ值為待放置數(shù)據(jù)塊Dt的訪問頻率Ft與每一個T集合中已存入數(shù)據(jù)塊的訪問頻率之和。

    設(shè)

    Ti={Di0,Di1,Di2,…,Dij}(0≤i≤q,0≤j≤s) 則

    (11)

    μi反映了Dt存入第i個節(jié)點(diǎn)Ti后,該節(jié)點(diǎn)的總的訪問頻率,μi的值越高,則說明Ti越有可能存在熱點(diǎn)問題。

    用戶在配置文件中設(shè)置節(jié)點(diǎn)訪問頻率的閾值σ,當(dāng)μi>σ時,則Dt不放置在節(jié)點(diǎn)Ti中。

    6)放置數(shù)據(jù)塊。

    如果α存在唯一最小值,且μ的值小于閾值σ,則Dt放置在最小α值的T集合中;如果存在多個最小值,且μ的值小于閾值σ,則考慮集群的負(fù)載均衡,在所有最小α值的T中選擇數(shù)據(jù)塊數(shù)量最少的T集合并將Dt放置在其中。

    如果最小α值的集合Ti,其μ的值大于閾值σ,待放置數(shù)據(jù)塊Dt存入該節(jié)點(diǎn),則有可能導(dǎo)致熱點(diǎn)問題,需要選擇其他節(jié)點(diǎn)進(jìn)行存儲。

    考慮到網(wǎng)絡(luò)帶寬對于數(shù)據(jù)通信的影響,選擇與Ti位于同一機(jī)架的節(jié)點(diǎn)作為新的候選節(jié)點(diǎn)。在Hadoop集群中位于同一機(jī)架的節(jié)點(diǎn)在物理結(jié)構(gòu)上是指連接在同一臺交換機(jī)的所有節(jié)點(diǎn)。一般情況下,機(jī)架內(nèi)節(jié)點(diǎn)之間的數(shù)據(jù)通信效率要高于機(jī)架間節(jié)點(diǎn)的數(shù)據(jù)通信效率。因此選擇同一機(jī)架內(nèi)的節(jié)點(diǎn)存放數(shù)據(jù)塊Dt,當(dāng)執(zhí)行連接或聯(lián)合查詢時,在一定程度上也降低了網(wǎng)絡(luò)傳輸開銷。

    7)獲取Dt候選節(jié)點(diǎn)集合:

    A={Oi1,Oi2,…,Oil} 0≤l≤q

    A即與節(jié)點(diǎn)Oi位于同一機(jī)架上的節(jié)點(diǎn)集合。

    相應(yīng)的候選T集合為:

    T={Ti1,Ti2,…,Til} 0≤l≤q

    計算Dt與T中每一個T集合的α值與μ值。將T集合按照α值遞增的順序進(jìn)行排序,從第一個T開始,比較μ值與閾值σ的大小,如果μ值大于閾值σ,則選擇下一個T繼續(xù)比較,直到找到μ值小于閾值σ的T,并將Dt放置在該T中。

    8)如果候選T中的所有μ值大于閾值σ,則選擇不同機(jī)架的節(jié)點(diǎn)構(gòu)成候選節(jié)點(diǎn),重復(fù)執(zhí)行步驟7)。

    9)重復(fù)步驟3)~8),直到A中的數(shù)據(jù)塊全部放置在T集合中為止。

    10)依次將Ti中的數(shù)據(jù)塊存入節(jié)點(diǎn)Oi中(0≤i≤q),并清空Ti,直到所有T集合中的數(shù)據(jù)塊存入相應(yīng)的節(jié)點(diǎn)并清空為止。

    11)重復(fù)步驟1)~10),直到集合D中的所有數(shù)據(jù)塊存入集群中為止。

    5 實(shí)驗(yàn)

    5.1 實(shí)驗(yàn)環(huán)境

    本文搭建了一個實(shí)驗(yàn)平臺,用于測試使用數(shù)據(jù)塊優(yōu)化放置方案存儲數(shù)據(jù)相較于HDFS默認(rèn)的數(shù)據(jù)存儲方式下Hive的查詢效率是否有效提升。

    實(shí)驗(yàn)平臺由包含10個節(jié)點(diǎn)的集群構(gòu)成,集群上安裝運(yùn)行Hadoop和Hive。實(shí)驗(yàn)平臺中每個物理節(jié)點(diǎn)的硬件條件是相同的:8 G內(nèi)存,4核CPU和200 GB硬盤。

    實(shí)驗(yàn)數(shù)據(jù)使用某新零售大數(shù)據(jù)平臺中智能終端售貨機(jī)采集的真實(shí)商品銷量數(shù)據(jù),包括兩張表:商品銷售記錄表all_in_one,該表中包含236 304 718條商品銷售記錄,文件大小約16 GB;預(yù)測目標(biāo)表prediction_target,該表中包含45 113 525條記錄,每條記錄代表一件預(yù)測目標(biāo)商品,文件大小約3 GB。

    本文中Hive的查詢效率即單次H-SQL開始執(zhí)行至返回查詢結(jié)果的時間S(單位為s),由兩部分組成,即S=(t1+t2),t1為MapReduce任務(wù)執(zhí)行時間,t2為查詢結(jié)果打印時間。由于兩種存儲策略下實(shí)驗(yàn)的數(shù)據(jù)集和查詢命令相同,因此兩種策略下查詢結(jié)果的打印時間t2相差無幾,誤差可以忽略。因此S可以反映兩種存儲策略下MapReduce任務(wù)執(zhí)行時間的差異,即Hive查詢效率的差異。

    5.2 對比實(shí)驗(yàn)

    將數(shù)據(jù)塊優(yōu)化放置方案和HDFS默認(rèn)數(shù)據(jù)塊放置方案下的Hive查詢效率進(jìn)行對比。

    兩種數(shù)據(jù)塊放置方案下,每個節(jié)點(diǎn)放置的數(shù)據(jù)塊數(shù)量如表6所示。

    表6 數(shù)據(jù)塊分布情況

    實(shí)驗(yàn)使用的查詢工作集Q中共5條查詢命令,Q0、Q1、Q2、Q3執(zhí)行同一類查詢?nèi)蝿?wù):統(tǒng)計數(shù)臺售貨機(jī)在某一時間范圍內(nèi)的每日銷量,按指令順序增加目標(biāo)售貨機(jī)數(shù)量和延長時間范圍,觀察Hive查詢?nèi)蝿?wù)在不同負(fù)載下查詢效率是否得到提升;Q4統(tǒng)計每一臺售貨機(jī)的每一件商品在某時間范圍內(nèi)的商品總銷量。

    Q0、Q1、Q2、Q3查詢結(jié)果中分別包含2 737、110 972、1 464 528、31 792 854行數(shù)據(jù),Q4查詢結(jié)果中包含87 975行數(shù)據(jù)。每條指令執(zhí)行20次取時間S的平均值,Q0、Q1、Q2、Q3在優(yōu)化放置方案和默認(rèn)放置方案下的效率對比如圖5所示。Q4的執(zhí)行效率如圖6所示。

    圖5 Q0、Q1、Q2、Q3查詢性能對比

    圖6 Q4查詢性能對比

    從上述實(shí)驗(yàn)對比可知,相較于默認(rèn)的數(shù)據(jù)塊放置策略,使用基于相關(guān)關(guān)系分析的數(shù)據(jù)塊優(yōu)化放置策略存儲數(shù)據(jù),Hive的查詢效率提升了約10%。

    6 結(jié)束語

    HDFS存儲結(jié)構(gòu)化數(shù)據(jù)時忽略了數(shù)據(jù)之間的相關(guān)關(guān)系對上層Hive查詢效率存在的不利影響,本文由此提出了一套基于相關(guān)關(guān)系分析的數(shù)據(jù)存儲策略。劃分?jǐn)?shù)據(jù)塊前對數(shù)據(jù)集使用范圍分區(qū)重新組織,然后根據(jù)查詢命令集分析數(shù)據(jù)塊之間的相關(guān)關(guān)系并構(gòu)建關(guān)系矩陣,最后通過數(shù)據(jù)塊優(yōu)化放置方案將數(shù)據(jù)存儲在HDFS集群中合適的節(jié)點(diǎn)上。通過實(shí)驗(yàn)對比可知,相較于默認(rèn)的數(shù)據(jù)塊放置策略,使用基于相關(guān)關(guān)系分析的數(shù)據(jù)塊優(yōu)化放置策略存儲數(shù)據(jù),Hive的查詢效率有了一定的提升。

    猜你喜歡
    集群矩陣頻率
    振動與頻率
    海上小型無人機(jī)集群的反制裝備需求與應(yīng)對之策研究
    一種無人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計
    電子制作(2018年11期)2018-08-04 03:25:40
    Python與Spark集群在收費(fèi)數(shù)據(jù)分析中的應(yīng)用
    勤快又呆萌的集群機(jī)器人
    極限頻率
    初等行變換與初等列變換并用求逆矩陣
    矩陣
    南都周刊(2015年4期)2015-09-10 07:22:44
    矩陣
    南都周刊(2015年3期)2015-09-10 07:22:44
    矩陣
    南都周刊(2015年1期)2015-09-10 07:22:44
    汕头市| 黄石市| 台中市| 巴彦淖尔市| 武宣县| 泰来县| 繁昌县| 增城市| 黄山市| 乌兰县| 泊头市| 灌南县| 利辛县| 明水县| 鹤峰县| 瑞丽市| 庆元县| 蚌埠市| 青川县| 遂溪县| 诸城市| 汝阳县| 嫩江县| 察哈| 昌平区| 商南县| 南漳县| 安陆市| 临江市| 兰西县| 闽侯县| 恭城| 安龙县| 如东县| 鹤壁市| 盘山县| 尼玛县| 滁州市| 怀集县| 长乐市| 锡林浩特市|