亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于HBase的QAR數(shù)據(jù)存儲(chǔ)設(shè)計(jì)與實(shí)現(xiàn)

        2020-05-23 10:06:54霍緯綱程文莉李繼龍
        關(guān)鍵詞:航班號字節(jié)航班

        霍緯綱,程文莉,李繼龍

        (中國民航大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,天津 300300)

        0 引 言

        QAR(quick access recorder)意為快速存取記錄器,是指帶保護(hù)裝置的機(jī)載飛行數(shù)據(jù)記錄設(shè)備。QAR數(shù)據(jù)涵蓋了飛機(jī)飛行操縱品質(zhì)監(jiān)控的絕大部分參數(shù),具有時(shí)序性、容量大、參數(shù)多等特點(diǎn),是典型的多維時(shí)間序列數(shù)據(jù)。目前,中國民航每一架飛機(jī)上都已安裝快速存取記錄器,用以記錄飛機(jī)包含的所有傳感器每秒鐘所產(chǎn)生的數(shù)據(jù)。據(jù)統(tǒng)計(jì),一個(gè)中等規(guī)模航空公司每年產(chǎn)生的QAR數(shù)據(jù)量可達(dá)到PB級,甚至TB級。通過對QAR數(shù)據(jù)的有效存儲(chǔ)和分析,航空公司可以掌握公司航班飛行的安全動(dòng)態(tài),從而有針對性地加強(qiáng)安全監(jiān)管,減少事故隱患,提高飛行品質(zhì)[1]。

        傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在存儲(chǔ)海量QAR數(shù)據(jù)時(shí)存在性能瓶頸、數(shù)據(jù)組織模式單一、延時(shí)較高等諸多問題[2]。HBase[3](Hadoop database)是一個(gè)高可靠、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,數(shù)據(jù)模式簡單、靈活、存儲(chǔ)速度快、擴(kuò)展性高。文獻(xiàn)[4-7]將HBase數(shù)據(jù)庫分別應(yīng)用于智能交通、船舶自動(dòng)識(shí)別、云智能室內(nèi)環(huán)境監(jiān)測、生物DNA與蛋白質(zhì)對等領(lǐng)域,都驗(yàn)證了HBase作為海量數(shù)據(jù)存儲(chǔ)的可靠性。但根據(jù)QAR數(shù)據(jù)的特點(diǎn)和應(yīng)用場景設(shè)計(jì)基于HBase的存儲(chǔ)模式和行鍵結(jié)構(gòu)至關(guān)重要。根據(jù)HBase中的數(shù)據(jù)寫入及存儲(chǔ)特點(diǎn),如果僅按照快速存取記錄器的采集時(shí)間作為行鍵,雖然從一定程度上能夠保證查詢效率,但在數(shù)據(jù)寫入時(shí),集群會(huì)出現(xiàn)熱點(diǎn)問題,造成較大的寫入延遲。另外,QAR數(shù)據(jù)參數(shù)眾多(維數(shù)高),需設(shè)計(jì)合理的HBase表結(jié)構(gòu),以滿足航空公司對QAR數(shù)據(jù)分析的查詢需求。本文設(shè)計(jì)實(shí)現(xiàn)了一種基于HBase的QAR數(shù)據(jù)存儲(chǔ)模式。該存儲(chǔ)模式能夠較好滿足航空公司分析飛行超限事件的業(yè)務(wù)需求。將QAR數(shù)據(jù)劃分為七大主題,設(shè)計(jì)了基于主題優(yōu)化策略的行鍵,并采用了預(yù)分區(qū)技術(shù),避免了寫熱點(diǎn)問題,使QAR數(shù)據(jù)能均衡地分布在集群中。

        1 相關(guān)工作

        HBase作為時(shí)間序列數(shù)據(jù)的存儲(chǔ)介質(zhì)在工業(yè)領(lǐng)域中有著廣泛的應(yīng)用。文獻(xiàn)[8]從不同角度探討、設(shè)計(jì)了行鍵結(jié)構(gòu),并通過二級索引改善了HBase的查詢效率,但隨著RegionServer(HBase集群中的從節(jié)點(diǎn))中的Region(HBase中數(shù)據(jù)存儲(chǔ)和管理的基本單元)發(fā)生split(分裂)操作,其索引結(jié)構(gòu)需要不斷更新,帶來更新延遲;文獻(xiàn)[9]通過采用MySQL和HBase存儲(chǔ)地震業(yè)務(wù)需求的結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化數(shù)據(jù)采用基于列簇級別的大對象對文件形式的數(shù)據(jù)進(jìn)行管理,對小文件數(shù)據(jù)的存儲(chǔ)有較好的效果;劉博偉等[10]對于金融的時(shí)序數(shù)據(jù)的存儲(chǔ):該系統(tǒng)采用了異步機(jī)制的時(shí)間驅(qū)動(dòng)的Netty中間件,對高并發(fā)事務(wù)有較好的處理性能,設(shè)計(jì)了基于HBase的行鍵優(yōu)化策略和基于時(shí)序數(shù)據(jù)的表設(shè)計(jì)策略,在一定程度上解決了HBase存儲(chǔ)熱點(diǎn)問題以及數(shù)據(jù)存儲(chǔ)的分散問題;陸婷等[11]利用多源緩沖結(jié)構(gòu)對不同類型的流數(shù)據(jù)進(jìn)行隊(duì)列劃分,結(jié)合一致性哈希、多線程技術(shù)、行鍵優(yōu)化設(shè)計(jì)策略將數(shù)據(jù)存入HBase,實(shí)現(xiàn)了多源數(shù)據(jù)的存儲(chǔ)性能的提升,具有良好的擴(kuò)展性能;王遠(yuǎn)等[12]針對海量智能電網(wǎng)數(shù)據(jù)的存儲(chǔ),提出以策略驅(qū)動(dòng)的基于HBase的時(shí)序數(shù)據(jù)存儲(chǔ)方法,在OpenTSDB中實(shí)現(xiàn)了數(shù)據(jù)分散存儲(chǔ)同一時(shí)間產(chǎn)生的數(shù)據(jù),提高了數(shù)據(jù)加載時(shí)的I/O能力和查詢分析能力,但只適用于數(shù)值型數(shù)據(jù),存在一定的局限性;Ochiai H[13]等設(shè)計(jì)了基于HBase的樓宇設(shè)備信息管理系統(tǒng),收集某棟大樓內(nèi)的光照、暖通等設(shè)備傳感器的數(shù)據(jù)進(jìn)行存儲(chǔ)?;诜顷P(guān)系型模型的QAR數(shù)據(jù)存儲(chǔ)研究工作相對較少,馮興杰等[14]設(shè)計(jì)了基于Hive的數(shù)據(jù)倉庫的構(gòu)建:通過對Hive特點(diǎn)及QAR數(shù)據(jù)結(jié)構(gòu)分析,設(shè)計(jì)了基于Hive的QAR數(shù)據(jù)倉庫的存儲(chǔ)結(jié)構(gòu),該設(shè)計(jì)更適用于分析型應(yīng)用,無法滿足具有低延遲要求的QAR操作型應(yīng)用需求。本文在上述工作基礎(chǔ)上,根據(jù)QAR數(shù)據(jù)特點(diǎn),設(shè)計(jì)實(shí)現(xiàn)了基于HBase的QAR數(shù)據(jù)存儲(chǔ)模式,實(shí)驗(yàn)結(jié)果表明該存儲(chǔ)模式具有良好的存取性能。

        2 數(shù)據(jù)存儲(chǔ)模式設(shè)計(jì)

        2.1 參數(shù)主題劃分

        經(jīng)過與領(lǐng)域?qū)<矣懻摚瑢⒑娇展舅P(guān)注的問題按主題對QAR數(shù)據(jù)進(jìn)行劃分,歸納為以下主題:安全分析主題、航跡描繪主題、節(jié)省燃油主題、發(fā)動(dòng)機(jī)狀況主題、預(yù)測主題、飛行員操作分析主題和其它主題。主題與QAR參數(shù)的對應(yīng)關(guān)系見表1。

        表1 參數(shù)主題劃分

        2.2 QAR數(shù)據(jù)存儲(chǔ)設(shè)計(jì)

        2.2.1 HBase表結(jié)構(gòu)設(shè)計(jì)

        經(jīng)譯碼后的每個(gè)QAR文件包含飛機(jī)的航班信息、參數(shù)信息、參數(shù)值3部分,所以文中將每個(gè)QAR文件中的數(shù)據(jù)劃分為航班元信息、參數(shù)元信息和參數(shù)值3類。根據(jù)QAR文件中的數(shù)據(jù)類別和超限事件分析需求設(shè)計(jì)了4張表,分別是航班元信息表Flight_info,參數(shù)元信息表Para_info,航班參數(shù)索引表Index和數(shù)據(jù)值表Value。

        Flight_info表的行鍵為航班號與日期的組合。該表包含一個(gè)列簇Flight_CF,列簇中的列分別為航空公司、機(jī)尾號、起飛時(shí)間、落地時(shí)間、起飛機(jī)場、落地機(jī)場、航班序列號,其中航班序列號對應(yīng)每個(gè)QAR數(shù)據(jù)文件唯一編號,記為fid。Flight_info表的表結(jié)構(gòu)見表2。

        表2 Flight_info表結(jié)構(gòu)

        Para_info表以參數(shù)名稱作為Para_info表的行鍵,該表包含一個(gè)列簇Para_CF,該列簇包含參數(shù)的簡稱、單位、所屬主題、序列號。根據(jù)2.1節(jié)中的參數(shù)主題劃分確定參數(shù)的主題,記為topic,由每個(gè)參數(shù)的采集順序生成一個(gè)唯一的參數(shù)序列號,記為pid,其結(jié)構(gòu)見表3。

        表3 Para_info表結(jié)構(gòu)示意

        Index表相當(dāng)于下文Value表的索引,該表共包含兩個(gè)列簇:Index_CF1和Index_CF2。該表的行鍵為航班號、航班日期、參數(shù)名三者的組合。Index_CF1列簇包含一個(gè)列,該列將Flight_info表的fid與Para_info表的pid進(jìn)行組合,記為paraid;Index_CF2列簇中包含一個(gè)列,該列存儲(chǔ)Index_CF1:paraid對應(yīng)的航班號、日期及參數(shù)對應(yīng)主題名三者組合的MD5值的前四字節(jié),即Value表行鍵的前四字節(jié),記為md5。Index表的結(jié)構(gòu)見表4。

        表4 Index表結(jié)構(gòu)

        Value表負(fù)責(zé)存儲(chǔ)QAR文件中參數(shù)的時(shí)序數(shù)據(jù)值,每行存儲(chǔ)一個(gè)航班文件中一個(gè)參數(shù)在一分鐘內(nèi)的數(shù)據(jù)。該表的行鍵設(shè)計(jì)參見2.2.2節(jié)的詳細(xì)說明。除行鍵外,Value表包含一個(gè)列簇Value_CF,該列簇包含60列,分別存儲(chǔ)QAR參數(shù)一分鐘內(nèi)每秒的數(shù)據(jù)值,列名即為秒數(shù),其表結(jié)構(gòu)見表5。

        2.2.2 Value表行鍵設(shè)計(jì)

        根據(jù)QAR參數(shù)的主題劃分及2.2.1節(jié)HBase表結(jié)構(gòu)

        表5 Value表存儲(chǔ)結(jié)構(gòu)

        設(shè)計(jì)對Value表的行鍵結(jié)構(gòu)進(jìn)行了設(shè)計(jì),其結(jié)構(gòu)如圖1所示。Value表的行鍵設(shè)計(jì)中包含了以下信息:航班號、航班日期、參數(shù)及參數(shù)所屬主題、參數(shù)取值對應(yīng)的時(shí)間。由于在設(shè)計(jì)行鍵時(shí)應(yīng)保證行鍵的長度應(yīng)盡量短,盡可能占用較少的存儲(chǔ)空間,本文設(shè)計(jì)行鍵長度為16個(gè)字節(jié),行鍵的前4個(gè)字節(jié)內(nèi)容計(jì)算方式為:航班號、航班日期及參數(shù)主題進(jìn)行組合,采用MD5散列方法對該組合進(jìn)行處理,取散列值的高四字節(jié)作為行鍵的高4字節(jié)內(nèi)容。行鍵的中間八字節(jié)取Flight_info表的fid和Para_info表的pid序列號組合。低四字節(jié)取參數(shù)采集的時(shí)間中的小時(shí)、分鐘位。

        圖1 Value表行鍵結(jié)構(gòu)

        現(xiàn)以2017年7月19日的某航班的名為GROUND SPEED的參數(shù)在4∶46分的數(shù)據(jù)為例說明Value表行鍵結(jié)構(gòu)及數(shù)據(jù)存儲(chǔ)形式。該航班的fid為0018,參數(shù)的pid為0179,將時(shí)間4∶46以0446表示,將一分鐘內(nèi)的數(shù)據(jù)存入Value表,其存儲(chǔ)形式如圖2所示。

        圖2 行鍵計(jì)算

        2.2.3 預(yù)分區(qū)設(shè)計(jì)

        HBase在創(chuàng)建數(shù)據(jù)表時(shí)同時(shí)創(chuàng)建一個(gè)沒有起始和終止行鍵的Region,數(shù)據(jù)按照鍵值對的字典序升序向該Region中寫入,隨著寫入數(shù)據(jù)的增多,當(dāng)HBase中的Region達(dá)到閾值,會(huì)頻繁觸發(fā)Split操作。這種原始的寫入機(jī)制會(huì)產(chǎn)生熱點(diǎn)問題,并且split操作也會(huì)消耗集群的I/O資源。本文在2.2.2節(jié)基于MD5散列行鍵設(shè)計(jì)的基礎(chǔ)上,采用預(yù)分區(qū)策略,以進(jìn)一步提高集群讀寫性能。具體分區(qū)策略如下:

        取散列值的前兩個(gè)字節(jié)作為預(yù)分區(qū)的splitKey。MD5散列值的前兩個(gè)字節(jié)的取值范圍是00~ff,假設(shè)擬劃分m(m為整數(shù))個(gè)分區(qū),將00~ff范圍內(nèi)的候選splitKey從1開始進(jìn)行編號,按照如下方式初步確定預(yù)分區(qū)的splitKey,第n個(gè)region的切分鍵的序號產(chǎn)生方式如式(1)所示

        (1)

        (2)

        其中,x的取值如式(3)所示

        (3)

        最后,根據(jù)得到的預(yù)分區(qū)結(jié)果生成二維字節(jié)數(shù)組splitKeys,創(chuàng)建預(yù)分區(qū)的Value表。

        2.3 存儲(chǔ)及查詢過程實(shí)現(xiàn)

        2.3.1 QAR數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)

        下面按2.2.1節(jié)設(shè)計(jì)的表結(jié)構(gòu)說明QAR數(shù)據(jù)的存儲(chǔ)過程。其中Flight_info表與Para_info表、Index表的存儲(chǔ)原理類似,現(xiàn)以Flight_info表的存儲(chǔ)過程為例描述。文中將所有譯碼后的QAR數(shù)據(jù)文件的路徑記錄在文本文件file_path.txt中,通過讀取file_path.txt文件中的路徑打開QAR文件,然后解析具體QAR文件的表頭第一,二行內(nèi)容,生成Flight_info表對應(yīng)的航班元數(shù)據(jù)信息。其中航班號為航空公司二位代碼和航班序號組成,航班日期按格式y(tǒng)yyymmdd進(jìn)行提取,機(jī)尾號為字母“B”加數(shù)位阿拉伯?dāng)?shù)字構(gòu)成,起落地機(jī)場為機(jī)場四字碼,起落地時(shí)間為12小時(shí)制,以AM與PM區(qū)分日間或夜間。在讀取QAR文件的路徑時(shí),記錄該路徑所在位置,生成4個(gè)字節(jié)的數(shù)字序列號,將序列號賦值于fid。將QAR文件表頭與Flight_info表相關(guān)的數(shù)據(jù)以Put(List)的方式批量提交至服務(wù)端進(jìn)行寫入,具體流程如圖3所示。

        圖3 Flight_info等表數(shù)據(jù)存儲(chǔ)流程

        首先,創(chuàng)建List對象batch,再將航班號和航班日期組合,以該組合作為行鍵創(chuàng)建Put對象,通過調(diào)用put對象的addColumn方法,將起落時(shí)間、起落地機(jī)場等列值添加到Put對象中,將該P(yáng)ut對象添加到List的對象中,然后,創(chuàng)建與Flight_info表的連接,調(diào)用表的put方法,將List提交到服務(wù)端,最后持久化至HDFS文件中,再循環(huán)執(zhí)行第二個(gè)路徑文件。

        Value表存儲(chǔ)QAR文件的參數(shù)值部分。首先,每100行為一組讀取QAR文件的數(shù)據(jù)部分。對于每組中的數(shù)據(jù)按照參數(shù)維進(jìn)行處理,取每行的參數(shù)采集時(shí)間切分為時(shí)分?jǐn)?shù)據(jù)和秒鐘數(shù)據(jù),按2.2.2節(jié)的行鍵設(shè)計(jì)方式組織行鍵,并創(chuàng)建對應(yīng)的Put對象,以秒鐘數(shù)據(jù)作為Value表的列名,將每分鐘的數(shù)據(jù)列添加至Put對象中,將該P(yáng)ut對象添加至Put列表對象中,最后提交到數(shù)據(jù)表,完成該組參數(shù)的數(shù)據(jù)值存儲(chǔ),再進(jìn)行下一組數(shù)據(jù)的存儲(chǔ)。

        Value表數(shù)據(jù)寫入

        Input:file_path

        Output:void

        if(count% 100)then//每100行數(shù)據(jù)進(jìn)行處理

        batch←List//創(chuàng)建Put列表對象batch

        forjfrom0tothirdlenthen//從參數(shù)維進(jìn)行循環(huán)處理

        forkfrom0to100then//以讀取到的100行為循環(huán)對數(shù)據(jù)進(jìn)行處理

        mintim←time(k).subString()//將時(shí)間的子字符串的時(shí)分?jǐn)?shù)據(jù)截取

        sectime←time(k).subString()//獲取時(shí)間字符串的秒數(shù)數(shù)據(jù)

        rowkey←md5+fid+pid(j)+mintime//組合為Value表的rowkey

        qualifier←sectime//以秒鐘時(shí)間作為列名

        value←value[k][j]//將數(shù)據(jù)部分的參數(shù)值作為value值

        put←Put(rowkey)//以rowkey創(chuàng)建Put對象

        put.addColumn(CF,qulifer,value)//將鍵值對添加至對應(yīng)行的put對象

        batch.add(put)//將Put對象添加到列表中

        endfor

        endfor

        table.put(batch)//將Put列表提交到對應(yīng)表

        endif

        2.3.2 數(shù)據(jù)查詢實(shí)現(xiàn)

        定義f、p、t1、t2分別代表航班號、參數(shù)名稱、起始查詢時(shí)間、終止查詢時(shí)間,飛行品質(zhì)監(jiān)控分析中典型的查詢條件表示為q(f,p,t1,t2)。 例如2017年7月19日航班號為AB2834的航班,k時(shí)間在12:34到12:36的地速GROUND SPEED取值查詢表示為q("AB283420170719","GROUND SPEED", "1234","1236")。 現(xiàn)以該查詢?yōu)槔f明文中的QAR數(shù)據(jù)查詢實(shí)現(xiàn)過程,具體如下:

        首先,根據(jù)查詢參數(shù)f="AB283420170719"、p="GROUND SPEED"、t1="1234"、t2="1236",將查詢條件按照index表的行鍵結(jié)構(gòu)進(jìn)行組織,得到index表的rowkey="AB283420170719GROUND SPEED",通過行鍵過濾器獲取到index表對應(yīng)的paraid列值:“00180179”和md5列值:“c9c6”;然后,將兩列值組合得到Value表行鍵的高十二字節(jié)。其次,將查詢的參數(shù)的時(shí)間范圍添加至Value表行鍵的低四字節(jié),得到查詢Value表的行鍵范圍:"AB283420170719GROUND SPEED1234"~"AB283420170719GROUND SPEED1236";設(shè)置二級過濾器,分別以GREATER、LESS對Value表進(jìn)行過濾;最后,創(chuàng)建掃描器對象,將二級過濾器添加至掃描器對象,返回查詢結(jié)果。其它飛行品質(zhì)監(jiān)控的查詢場景如單值查詢、基于參數(shù)主題的查詢等與上述查詢原理相似。

        飛行品質(zhì)分析典型查詢實(shí)現(xiàn)

        Input:f,p,t1,t2

        Output: result

        table1←pool.getTable(“Index”)//通過連接池創(chuàng)建與Index表的連接

        table2←pool.getTable(“Value”)

        rowkey1←f+p//將查詢航班號、 參數(shù)名組合為index表的查詢行鍵

        get←Get(rowkey1)//創(chuàng)建get對象

        paraid←table1.get.addColumn(“paraid”)//從index表獲取paraid列

        md5←table1.get.addColumn(“md5”)//從index表獲取md5列

        startrowkey←md5+paraid+t1//將時(shí)間與md5、paraid組合為查詢起始行鍵

        endrowkey←md5+paraid+t2//將時(shí)間與md5、paraid組合為查詢終止行鍵

        setfilter1(GREATER,startrowkey)//對起始行鍵按GREATER指定過濾器1

        setfilter2(LESS,endrowkey)//對終止行鍵按LESS指定過濾器2

        filterlist←FilterList//創(chuàng)建過濾器列表,為多級過濾器指定通過方式

        scan←Scan()//創(chuàng)建掃描器對象

        scan.setFilter(filterList)//為掃描器對象設(shè)置過濾器列表

        scanner←table.getScanner(scan)//在數(shù)據(jù)表上創(chuàng)建掃描器

        result←scanner.next()//得到Result結(jié)果集,并輸出

        3 實(shí)驗(yàn)結(jié)果與分析

        3.1 實(shí)驗(yàn)環(huán)境設(shè)置

        實(shí)驗(yàn)數(shù)據(jù)為某航空公司2017年200個(gè)航段的QAR數(shù)據(jù)文件。實(shí)驗(yàn)集群包含3個(gè)節(jié)點(diǎn):一個(gè)主節(jié)點(diǎn)master和兩個(gè)虛擬從節(jié)點(diǎn)slave1、slave2。集群整體搭建在一臺(tái)內(nèi)存為16 G、磁盤存儲(chǔ)空間為2 T的服務(wù)器上,服務(wù)器型號為Power-Edge T130。每個(gè)節(jié)點(diǎn)分配50 GB磁盤空間,1 GB內(nèi)存,單核CPU。Hadoop集群的版本分別為Hadoop 2.7.3,Zookeeper3.4.10,HBase1.2.6。文中設(shè)置分區(qū)個(gè)數(shù)m為27,按照2.2.3節(jié)預(yù)分區(qū)設(shè)計(jì)方法,經(jīng)過預(yù)分區(qū)的測試實(shí)驗(yàn),確定預(yù)分區(qū)的Splitkey為{1, 1b, 2a, 2f, 2z, 3b, 42, 4e, 5c, 65, 6f, 72, 7b, 80, 8f, 93, 9e, a6, ac, b4, bf, ca, d, df, f, fc}。集群中HDFS的復(fù)制因子設(shè)置為2。

        3.2 QAR數(shù)據(jù)存儲(chǔ)分布實(shí)驗(yàn)

        實(shí)驗(yàn)在QAR文件數(shù)量逐步遞增的情況下,驗(yàn)證集群中QAR數(shù)據(jù)存儲(chǔ)分布效果。共設(shè)置了5個(gè)測試,每個(gè)測試使用的QAR文件個(gè)數(shù)見表6。實(shí)驗(yàn)結(jié)果如圖4所示。

        圖4中橫坐標(biāo)表示測試的次數(shù),左側(cè)縱坐標(biāo)表示集群數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)量,右側(cè)縱坐標(biāo)表示實(shí)驗(yàn)過程中所用數(shù)據(jù)總量,單位均為GB。DN1、DN2表示集群的數(shù)據(jù)節(jié)點(diǎn)DataNode1、DataNode2,數(shù)據(jù)量圖例表示每次測試實(shí)驗(yàn)的數(shù)據(jù)量大小。從圖中不難看出,集群的數(shù)據(jù)節(jié)點(diǎn)DN1、DN2

        表6 實(shí)驗(yàn)一數(shù)據(jù)

        的數(shù)據(jù)量在各測試實(shí)驗(yàn)中始終保持相對均衡,隨著數(shù)據(jù)總量的線性增長,各數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)增長也呈現(xiàn)相同的趨勢,各數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)量大小相差少于2%。本設(shè)計(jì)中,Value表的行鍵高位采用了哈希處理,使Value表中的數(shù)據(jù)分布具有更好的離散性,避免了數(shù)據(jù)寫熱點(diǎn)問題的發(fā)生。在行鍵的哈希設(shè)計(jì)基礎(chǔ)上,Value表采用預(yù)分區(qū)技術(shù),共劃分27個(gè)分區(qū),各數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)分區(qū)數(shù)量相對均衡,避免了數(shù)據(jù)傾斜。

        圖4 QAR數(shù)據(jù)存儲(chǔ)實(shí)驗(yàn)結(jié)果

        3.3 QAR數(shù)據(jù)查詢實(shí)驗(yàn)

        根據(jù)實(shí)際飛行品質(zhì)分析需求,本節(jié)設(shè)置了3種不同的查詢場景。具體如下:

        實(shí)驗(yàn)1:查詢指定航班指定參數(shù)連續(xù)5分鐘內(nèi)的300個(gè)參數(shù)數(shù)據(jù)。

        實(shí)驗(yàn)2:查詢指定航班指定主題下的5個(gè)不同參數(shù),在1分鐘內(nèi)的60個(gè)連續(xù)數(shù)據(jù),共300個(gè)值。

        實(shí)驗(yàn)3:查詢指定航班5個(gè)不同主題下的指定參數(shù)在1分鐘內(nèi)的60個(gè)連續(xù)數(shù)據(jù),共300個(gè)值。

        以上的每個(gè)實(shí)驗(yàn)均進(jìn)行20次測試,實(shí)驗(yàn)結(jié)果如圖5~圖7所示。圖5~圖7中橫坐標(biāo)表示實(shí)驗(yàn)次數(shù),縱坐標(biāo)表示查詢耗時(shí),單位為ms。圖5~圖7中的20次查詢的平均耗時(shí)分別為291.45 ms,1860.4 ms,1992 ms。由此可知,文中的存儲(chǔ)設(shè)計(jì)最適用于查詢指定QAR參數(shù)在一段時(shí)間內(nèi)的連續(xù)取值序列。同一主題下的不同參數(shù)的取值序列查詢效率高于不同主題的參數(shù)取值查詢。這是因?yàn)樵诒疚腣alue表的行鍵結(jié)構(gòu)設(shè)計(jì)中,基于航班號和參數(shù)主題的哈希散列值能使同一個(gè)主題的不同參數(shù)連續(xù)存儲(chǔ)在region中,在行鍵的中間八字節(jié)采用航班編號及參數(shù)編號對參數(shù)進(jìn)行精確定位,Value表行鍵的低四字節(jié)取參數(shù)的采集時(shí)間,使得同一參數(shù)的數(shù)據(jù)以時(shí)間的遞增順序存儲(chǔ)在連續(xù)空間中。

        圖5 實(shí)驗(yàn)1結(jié)果

        圖6 實(shí)驗(yàn)2結(jié)果

        圖7 實(shí)驗(yàn)3結(jié)果

        3.4 查詢對比實(shí)驗(yàn)

        為了驗(yàn)證文中設(shè)計(jì)的存儲(chǔ)模式在典型QAR數(shù)據(jù)查詢分析上的有效性,與文獻(xiàn)[10]中存儲(chǔ)時(shí)序數(shù)據(jù)的行鍵設(shè)計(jì)策略進(jìn)行了對比。根據(jù)文獻(xiàn)[10]的行鍵設(shè)計(jì)方法,實(shí)驗(yàn)中將航班號、日期、參數(shù)名及參數(shù)采集時(shí)間作為行鍵,以指定航班指定參數(shù)在一段時(shí)間內(nèi)的取值序列為查詢場景,查詢序列長度分別為300、3000、300 000,每個(gè)實(shí)驗(yàn)均進(jìn)行20次。實(shí)驗(yàn)結(jié)果如圖8(a)~圖8(c)所示。圖8中每個(gè)圖的橫坐標(biāo)為實(shí)驗(yàn)次數(shù),縱坐標(biāo)為讀取耗時(shí),單位為ms。由圖8(a)可知,在讀取參數(shù)取值序列較短的情況下,本文存儲(chǔ)設(shè)計(jì)模式的查詢耗時(shí)與采用文獻(xiàn)[10]的行鍵設(shè)計(jì)存儲(chǔ)模式下的查詢耗時(shí)相差較小。但是,從圖8(b),圖8(c)不難看出,隨著參數(shù)取值序列的增長,本文存儲(chǔ)模式下的查詢耗時(shí)明顯低于文獻(xiàn)[10]的行鍵設(shè)計(jì)策略的查詢耗時(shí)。這是因?yàn)榘凑瘴墨I(xiàn)[10]的設(shè)計(jì)進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),隨著存儲(chǔ)數(shù)據(jù)量的不斷增大,HBase中的Region會(huì)進(jìn)行多次分裂。在進(jìn)行數(shù)據(jù)查詢時(shí),HBase首先根據(jù)查詢條件生成的行鍵值確定Region,然后對該Region進(jìn)行掃描得到查詢結(jié)果。而本文根據(jù)航班號與參數(shù)主題散列值的前兩個(gè)字節(jié)及預(yù)實(shí)驗(yàn),將Value表分為了27個(gè)Region。在查詢過程中,本文能根據(jù)航班號與參數(shù)名對應(yīng)散列值的前兩個(gè)字節(jié)快速定位待查詢數(shù)據(jù)所在的Region,該過程的耗時(shí)少于文獻(xiàn)[10]定位Region的策略。而且本文生成每個(gè)Region內(nèi)的數(shù)據(jù)量也少于文獻(xiàn)[10]中由HBase系統(tǒng)自動(dòng)生成的Region,從而使本文在Region內(nèi)部的數(shù)據(jù)查詢時(shí)間也較少。

        圖8 與文獻(xiàn)[10]實(shí)驗(yàn)對比結(jié)果

        4 結(jié)束語

        文中設(shè)計(jì)實(shí)現(xiàn)了基于HBase的QAR數(shù)據(jù)文件的分布式存儲(chǔ)模式。根據(jù)飛行品質(zhì)監(jiān)控業(yè)務(wù)需求,將QAR參數(shù)集合劃分為七大主題。設(shè)計(jì)了基于參數(shù)主題的行鍵組織結(jié)構(gòu)和基于行鍵MD5散列值的預(yù)分區(qū)技術(shù)。真實(shí)QAR數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,文中的設(shè)計(jì)能使QAR數(shù)據(jù)文件均勻存儲(chǔ)在HBase集群中,在飛行品質(zhì)分析中典型的QAR參數(shù)取值序列查詢場景下有較高的查詢效率。

        猜你喜歡
        航班號字節(jié)航班
        基于多標(biāo)準(zhǔn)和改進(jìn)Siamese網(wǎng)絡(luò)的相似航班號判斷方法研究*
        全美航班短暫停飛
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        山航紅色定制航班
        金橋(2021年10期)2021-11-05 07:23:10
        山航紅色定制航班
        金橋(2021年8期)2021-08-23 01:06:24
        山航紅色定制航班
        金橋(2021年7期)2021-07-22 01:55:10
        民航空管自動(dòng)化系統(tǒng)相似航班號算法研究與實(shí)現(xiàn)
        民航管理(2020年4期)2020-05-10 09:55:06
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        簡談MC7字節(jié)碼
        基于異或編輯距離算法的航班號相似度研究*
        人人爽人人爽人人爽| 一区二区三区四区草逼福利视频 | 女人高潮久久久叫人喷水| 中文字幕女同系列在线看一 | 六月丁香婷婷色狠狠久久| 亚洲国产福利成人一区二区| 久久精品国产一区二区涩涩| 亚洲国产精品情侣视频| 老鸭窝视频在线观看| 精品免费看国产一区二区| 久久天天躁狠狠躁夜夜爽| 免费毛片性天堂| 日本一区二区日韩在线| 日韩人妻另类中文字幕| 久久精品国产精品青草| 亚洲av国产av综合av| 日韩精品免费在线视频| 国产精品高清视亚洲一区二区| 国内久久婷婷六月综合欲色啪| 天天鲁在视频在线观看| 国产熟妇搡bbbb搡bbbb搡| 国产一区二区丁香婷婷| 日本免费一区二区三区在线播放 | 国产亚洲美女精品久久| 黄色三级一区二区三区| 在线视频一区二区国产| 久久99精品久久久久久清纯| 女厕厕露p撒尿八个少妇| 久久久久久岛国免费网站| 日韩有码在线一区二区三区合集| 国产精品免费一区二区三区四区| 国产大陆亚洲精品国产| 久久精品国产99精品国偷| 黄页免费人成网址大全| 看女人毛茸茸下面视频| 国产国产人免费人成免费视频| 国产精品 视频一区 二区三区| 日本一区二区高清视频在线播放| 精品人妻一区二区三区久久| 自慰无码一区二区三区| 香蕉久久夜色精品国产|