• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      霍緯綱,程文莉,李繼龍

      (中國(guó)民航大學(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ù)。目前,中國(guó)民航每一架飛機(jī)上都已安裝快速存取記錄器,用以記錄飛機(jī)包含的所有傳感器每秒鐘所產(chǎn)生的數(shù)據(jù)。據(jù)統(tǒng)計(jì),一個(gè)中等規(guī)模航空公司每年產(chǎn)生的QAR數(shù)據(jù)量可達(dá)到PB級(jí),甚至TB級(jí)。通過(guò)對(duì)QAR數(shù)據(jù)的有效存儲(chǔ)和分析,航空公司可以掌握公司航班飛行的安全動(dòng)態(tài),從而有針對(duì)性地加強(qiáng)安全監(jiān)管,減少事故隱患,提高飛行品質(zhì)[1]。

      傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在存儲(chǔ)海量QAR數(shù)據(jù)時(shí)存在性能瓶頸、數(shù)據(jù)組織模式單一、延時(shí)較高等諸多問(wèn)題[2]。HBase[3](Hadoop database)是一個(gè)高可靠、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫(kù),數(shù)據(jù)模式簡(jiǎn)單、靈活、存儲(chǔ)速度快、擴(kuò)展性高。文獻(xiàn)[4-7]將HBase數(shù)據(jù)庫(kù)分別應(yīng)用于智能交通、船舶自動(dòng)識(shí)別、云智能室內(nèi)環(huán)境監(jiān)測(cè)、生物DNA與蛋白質(zhì)對(duì)等領(lǐng)域,都驗(yàn)證了HBase作為海量數(shù)據(jù)存儲(chǔ)的可靠性。但根據(jù)QAR數(shù)據(jù)的特點(diǎn)和應(yīng)用場(chǎng)景設(shè)計(jì)基于HBase的存儲(chǔ)模式和行鍵結(jié)構(gòu)至關(guān)重要。根據(jù)HBase中的數(shù)據(jù)寫(xiě)入及存儲(chǔ)特點(diǎn),如果僅按照快速存取記錄器的采集時(shí)間作為行鍵,雖然從一定程度上能夠保證查詢效率,但在數(shù)據(jù)寫(xiě)入時(shí),集群會(huì)出現(xiàn)熱點(diǎn)問(wèn)題,造成較大的寫(xiě)入延遲。另外,QAR數(shù)據(jù)參數(shù)眾多(維數(shù)高),需設(shè)計(jì)合理的HBase表結(jié)構(gòu),以滿足航空公司對(duì)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ù),避免了寫(xiě)熱點(diǎn)問(wè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),并通過(guò)二級(jí)索引改善了HBase的查詢效率,但隨著RegionServer(HBase集群中的從節(jié)點(diǎn))中的Region(HBase中數(shù)據(jù)存儲(chǔ)和管理的基本單元)發(fā)生split(分裂)操作,其索引結(jié)構(gòu)需要不斷更新,帶來(lái)更新延遲;文獻(xiàn)[9]通過(guò)采用MySQL和HBase存儲(chǔ)地震業(yè)務(wù)需求的結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化數(shù)據(jù)采用基于列簇級(jí)別的大對(duì)象對(duì)文件形式的數(shù)據(jù)進(jìn)行管理,對(duì)小文件數(shù)據(jù)的存儲(chǔ)有較好的效果;劉博偉等[10]對(duì)于金融的時(shí)序數(shù)據(jù)的存儲(chǔ):該系統(tǒng)采用了異步機(jī)制的時(shí)間驅(qū)動(dòng)的Netty中間件,對(duì)高并發(fā)事務(wù)有較好的處理性能,設(shè)計(jì)了基于HBase的行鍵優(yōu)化策略和基于時(shí)序數(shù)據(jù)的表設(shè)計(jì)策略,在一定程度上解決了HBase存儲(chǔ)熱點(diǎn)問(wèn)題以及數(shù)據(jù)存儲(chǔ)的分散問(wèn)題;陸婷等[11]利用多源緩沖結(jié)構(gòu)對(duì)不同類(lèi)型的流數(shù)據(jù)進(jìn)行隊(duì)列劃分,結(jié)合一致性哈希、多線程技術(shù)、行鍵優(yōu)化設(shè)計(jì)策略將數(shù)據(jù)存入HBase,實(shí)現(xiàn)了多源數(shù)據(jù)的存儲(chǔ)性能的提升,具有良好的擴(kuò)展性能;王遠(yuǎn)等[12]針對(duì)海量智能電網(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ǔ)。基于非關(guān)系型模型的QAR數(shù)據(jù)存儲(chǔ)研究工作相對(duì)較少,馮興杰等[14]設(shè)計(jì)了基于Hive的數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建:通過(guò)對(duì)Hive特點(diǎn)及QAR數(shù)據(jù)結(jié)構(gòu)分析,設(shè)計(jì)了基于Hive的QAR數(shù)據(jù)倉(cāng)庫(kù)的存儲(chǔ)結(jié)構(gòu),該設(shè)計(jì)更適用于分析型應(yīng)用,無(wú)法滿足具有低延遲要求的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)過(guò)與領(lǐng)域?qū)<矣懻?,將航空公司所關(guān)注的問(wèn)題按主題對(duì)QAR數(shù)據(jù)進(jìn)行劃分,歸納為以下主題:安全分析主題、航跡描繪主題、節(jié)省燃油主題、發(fā)動(dòng)機(jī)狀況主題、預(yù)測(cè)主題、飛行員操作分析主題和其它主題。主題與QAR參數(shù)的對(duì)應(yīng)關(guān)系見(jià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類(lèi)。根據(jù)QAR文件中的數(shù)據(jù)類(lèi)別和超限事件分析需求設(shè)計(jì)了4張表,分別是航班元信息表Flight_info,參數(shù)元信息表Para_info,航班參數(shù)索引表Index和數(shù)據(jù)值表Value。

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

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

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

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

      Index表相當(dāng)于下文Value表的索引,該表共包含兩個(gè)列簇:Index_CF1和Index_CF2。該表的行鍵為航班號(hào)、航班日期、參數(shù)名三者的組合。Index_CF1列簇包含一個(gè)列,該列將Flight_info表的fid與Para_info表的pid進(jìn)行組合,記為paraid;Index_CF2列簇中包含一個(gè)列,該列存儲(chǔ)Index_CF1:paraid對(duì)應(yīng)的航班號(hào)、日期及參數(shù)對(duì)應(yīng)主題名三者組合的MD5值的前四字節(jié),即Value表行鍵的前四字節(jié),記為md5。Index表的結(jié)構(gòu)見(jiàn)表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ì)參見(jiàn)2.2.2節(jié)的詳細(xì)說(shuō)明。除行鍵外,Value表包含一個(gè)列簇Value_CF,該列簇包含60列,分別存儲(chǔ)QAR參數(shù)一分鐘內(nèi)每秒的數(shù)據(jù)值,列名即為秒數(shù),其表結(jié)構(gòu)見(jiàn)表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ì)對(duì)Value表的行鍵結(jié)構(gòu)進(jìn)行了設(shè)計(jì),其結(jié)構(gòu)如圖1所示。Value表的行鍵設(shè)計(jì)中包含了以下信息:航班號(hào)、航班日期、參數(shù)及參數(shù)所屬主題、參數(shù)取值對(duì)應(yīng)的時(shí)間。由于在設(shè)計(jì)行鍵時(shí)應(yīng)保證行鍵的長(zhǎng)度應(yīng)盡量短,盡可能占用較少的存儲(chǔ)空間,本文設(shè)計(jì)行鍵長(zhǎng)度為16個(gè)字節(jié),行鍵的前4個(gè)字節(jié)內(nèi)容計(jì)算方式為:航班號(hào)、航班日期及參數(shù)主題進(jìn)行組合,采用MD5散列方法對(duì)該組合進(jìn)行處理,取散列值的高四字節(jié)作為行鍵的高4字節(jié)內(nèi)容。行鍵的中間八字節(jié)取Flight_info表的fid和Para_info表的pid序列號(hào)組合。低四字節(jié)取參數(shù)采集的時(shí)間中的小時(shí)、分鐘位。

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

      現(xiàn)以2017年7月19日的某航班的名為GROUND SPEED的參數(shù)在4∶46分的數(shù)據(jù)為例說(shuō)明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è)沒(méi)有起始和終止行鍵的Region,數(shù)據(jù)按照鍵值對(duì)的字典序升序向該Region中寫(xiě)入,隨著寫(xiě)入數(shù)據(jù)的增多,當(dāng)HBase中的Region達(dá)到閾值,會(huì)頻繁觸發(fā)Split操作。這種原始的寫(xiě)入機(jī)制會(huì)產(chǎn)生熱點(diǎn)問(wèn)題,并且split操作也會(huì)消耗集群的I/O資源。本文在2.2.2節(jié)基于MD5散列行鍵設(shè)計(jì)的基礎(chǔ)上,采用預(yù)分區(qū)策略,以進(jìn)一步提高集群讀寫(xiě)性能。具體分區(qū)策略如下:

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

      (1)

      (2)

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

      (3)

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

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

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

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

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

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

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

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

      Input:file_path

      Output:void

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

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

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

      forkfrom0to100then//以讀取到的100行為循環(huán)對(duì)數(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對(duì)象

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

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

      endfor

      endfor

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

      endif

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

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

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

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

      Input:f,p,t1,t2

      Output: result

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

      table2←pool.getTable(“Value”)

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

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

      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)//對(duì)起始行鍵按GREATER指定過(guò)濾器1

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

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

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

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

      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、磁盤(pán)存儲(chǔ)空間為2 T的服務(wù)器上,服務(wù)器型號(hào)為Power-Edge T130。每個(gè)節(jié)點(diǎn)分配50 GB磁盤(pán)空間,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)過(guò)預(yù)分區(qū)的測(cè)試實(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è)測(cè)試,每個(gè)測(cè)試使用的QAR文件個(gè)數(shù)見(jiàn)表6。實(shí)驗(yàn)結(jié)果如圖4所示。

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

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

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

      實(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次測(cè)試,實(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ì)中,基于航班號(hào)和參數(shù)主題的哈希散列值能使同一個(gè)主題的不同參數(shù)連續(xù)存儲(chǔ)在region中,在行鍵的中間八字節(jié)采用航班編號(hào)及參數(shù)編號(hào)對(duì)參數(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 查詢對(duì)比實(shí)驗(yàn)

      為了驗(yàn)證文中設(shè)計(jì)的存儲(chǔ)模式在典型QAR數(shù)據(jù)查詢分析上的有效性,與文獻(xiàn)[10]中存儲(chǔ)時(shí)序數(shù)據(jù)的行鍵設(shè)計(jì)策略進(jìn)行了對(duì)比。根據(jù)文獻(xiàn)[10]的行鍵設(shè)計(jì)方法,實(shí)驗(yàn)中將航班號(hào)、日期、參數(shù)名及參數(shù)采集時(shí)間作為行鍵,以指定航班指定參數(shù)在一段時(shí)間內(nèi)的取值序列為查詢場(chǎng)景,查詢序列長(zhǎng)度分別為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ù)取值序列的增長(zhǎng),本文存儲(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,然后對(duì)該Region進(jìn)行掃描得到查詢結(jié)果。而本文根據(jù)航班號(hào)與參數(shù)主題散列值的前兩個(gè)字節(jié)及預(yù)實(shí)驗(yàn),將Value表分為了27個(gè)Region。在查詢過(guò)程中,本文能根據(jù)航班號(hào)與參數(shù)名對(duì)應(yīng)散列值的前兩個(gè)字節(jié)快速定位待查詢數(shù)據(jù)所在的Region,該過(guò)程的耗時(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)對(duì)比結(jié)果

      4 結(jié)束語(yǔ)

      文中設(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ù)取值序列查詢場(chǎng)景下有較高的查詢效率。

      猜你喜歡
      航班號(hào)字節(jié)航班
      基于多標(biāo)準(zhǔn)和改進(jìn)Siamese網(wǎng)絡(luò)的相似航班號(hào)判斷方法研究*
      全美航班短暫停飛
      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)相似航班號(hào)算法研究與實(shí)現(xiàn)
      民航管理(2020年4期)2020-05-10 09:55:06
      No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
      簡(jiǎn)談MC7字節(jié)碼
      基于異或編輯距離算法的航班號(hào)相似度研究*
      吴旗县| 历史| 闵行区| 镇巴县| 桐乡市| 凌源市| 临夏县| 彰化市| 绥江县| 循化| 吉水县| 河北省| 芜湖县| 若尔盖县| 柳河县| 甘德县| 满城县| 梁河县| 南部县| 吴川市| 水富县| 湟中县| 玉环县| 涟水县| 长泰县| 太湖县| 湖口县| 大邑县| 广丰县| 肥乡县| 眉山市| 凤山市| 临泉县| 广东省| 静安区| 黄石市| 临海市| 翁牛特旗| 新巴尔虎左旗| 民勤县| 凤凰县|