楊 芬
(長(zhǎng)治職業(yè)技術(shù)學(xué)院 信息工程系,山西 長(zhǎng)治 046000)
·計(jì)算機(jī)科學(xué)研究·
云計(jì)算框架的海量數(shù)據(jù)查詢技術(shù)研究
楊 芬
(長(zhǎng)治職業(yè)技術(shù)學(xué)院 信息工程系,山西 長(zhǎng)治 046000)
云計(jì)算平臺(tái)的一個(gè)很重要的應(yīng)用就是對(duì)海量數(shù)據(jù)進(jìn)行存儲(chǔ)和查詢處理,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不能滿足海量數(shù)據(jù)的存儲(chǔ)和高效查詢要求,這就促使了NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生,如HBase.以分布式計(jì)算框架Hadoop為例,重點(diǎn)闡述在分布式數(shù)據(jù)庫(kù)HBase中海量數(shù)據(jù)的查詢方法和策略,為海量數(shù)據(jù)的查詢研究提供一種新的思路.
云計(jì)算;海量數(shù)據(jù)查詢;Hadoop;HBase
隨著數(shù)據(jù)的爆炸式增長(zhǎng),各行各業(yè)中都面臨著對(duì)海量數(shù)據(jù)的處理,尤其是在海量數(shù)據(jù)中定位查詢到指定數(shù)據(jù)引起了廣泛的研究和討論[1].HBase數(shù)據(jù)庫(kù)本身是面向列存儲(chǔ)的分布式開(kāi)源數(shù)據(jù)庫(kù),具有優(yōu)異的并發(fā)讀寫(xiě)操作性能,同時(shí)HBase數(shù)據(jù)庫(kù)可以對(duì)數(shù)據(jù)實(shí)行透明切分,更加提升了HBase存儲(chǔ)的水平伸縮性[2].HBase因其良好的性能優(yōu)勢(shì),如高可擴(kuò)展性、查詢延遲低等,得到了很多互聯(lián)網(wǎng)公司的大力應(yīng)用實(shí)踐.本文選擇在Hadoop平臺(tái)上對(duì)HBase進(jìn)行研究,并改進(jìn)HBase,為HBase中存儲(chǔ)的海量數(shù)據(jù)建立二級(jí)索引機(jī)制,代替原有的對(duì)非主鍵查詢的全表掃描的方式,降低查詢延遲.
二級(jí)索引的設(shè)計(jì)要求建立的索引表和原始數(shù)據(jù)的表必須放在同一個(gè)服務(wù)器上,從而保證通過(guò)索引提取相應(yīng)的數(shù)據(jù)時(shí),只需建立一次遠(yuǎn)程連接即可,大大提高了數(shù)據(jù)的查詢效率.
1.1 索引表的構(gòu)建思想
圖1 使用Coprocessor實(shí)現(xiàn)二級(jí)索引
現(xiàn)階段,HBase當(dāng)中的Coprocessor可以實(shí)現(xiàn)對(duì)于索引表的構(gòu)建任務(wù),并且通過(guò)Coprocessor提供的實(shí)現(xiàn)方法還能夠?qū)Base數(shù)據(jù)庫(kù)表進(jìn)行精確管理,包括對(duì)數(shù)據(jù)的插入、查詢、刪除等操作.如果需要為某一列簇建立二級(jí)索引,可以將索引信息單獨(dú)存入一張表.原始信息表中如果鍵值對(duì)應(yīng)的value空間開(kāi)銷不大,且逆向檢索頻繁,則可直接存儲(chǔ)在索引信息表中.圖1表示了索引表的構(gòu)建方法及數(shù)據(jù)的查找方式.通過(guò)圖1可看出,存儲(chǔ)在HBase中的原始數(shù)據(jù)表是按照基于列存儲(chǔ)的,所以在建立二級(jí)索引時(shí),也要基于列簇進(jìn)行建立.列索引的Key值由原始數(shù)據(jù)表的Key值和Value值字符串拼接而成.
二級(jí)索引設(shè)計(jì)采取的是將原始表中的Key和Value先倒置再拼接原理,換言之,將鍵值中的Key作為索引行對(duì)應(yīng)的列值,將Value作為索引行對(duì)應(yīng)的鍵[3].
1.2 二級(jí)索引實(shí)現(xiàn)
本文以某客運(yùn)站的交易數(shù)據(jù)為例,進(jìn)行說(shuō)明.
表1 某客運(yùn)站部分交易數(shù)據(jù)一覽表
由表1所示,設(shè)stationId為二級(jí)索引,通過(guò)stationId(客運(yùn)站編號(hào))可找到對(duì)應(yīng)的線路號(hào)和班次號(hào)等信息.
建立二級(jí)索引主要分為以下幾個(gè)步驟:
(1)創(chuàng)建一個(gè)數(shù)據(jù)掃描器,通過(guò)掃描器來(lái)查找需要建立索引的數(shù)據(jù).
(2)獲得數(shù)據(jù)后,建立一張二級(jí)索引表,RowKey值(stationId)由原始數(shù)據(jù)表中RowKey和Value拼接組成.
(3)寫(xiě)入成功后需要把相應(yīng)的RowKey(stationId)標(biāo)識(shí)保存到 IndexMessage 數(shù)據(jù)結(jié)構(gòu)中,把對(duì)應(yīng)的具體數(shù)據(jù)信息保存到 IndexFile 中,數(shù)據(jù)信息包括lineNum和shiftNum等信息.
特別需要注意的是,如果創(chuàng)建二級(jí)索引是在創(chuàng)建原始表還未導(dǎo)入數(shù)據(jù)之前進(jìn)行的,則創(chuàng)建的二級(jí)索引能夠滿足數(shù)據(jù)一致性的要求.如果原始表中已經(jīng)導(dǎo)入了相關(guān)數(shù)據(jù),之后再創(chuàng)建索引表,則無(wú)法保證數(shù)據(jù)的一致性訪問(wèn)要求,這就需要使用Buildlndex組件對(duì)己有的數(shù)據(jù)建立索引[4].但整個(gè)調(diào)用過(guò)程比較復(fù)雜,且耗時(shí)較長(zhǎng).所以建議在新建數(shù)據(jù)表后,先建立二級(jí)索引然后再導(dǎo)入業(yè)務(wù)數(shù)據(jù).
2.1 測(cè)試環(huán)境與測(cè)試數(shù)據(jù)
本次實(shí)驗(yàn)需要配置HBase集群:包括一臺(tái)主機(jī)為master,三臺(tái)為slave,操作系統(tǒng)選擇CentOS 5.0.整體需要安裝的軟件是:Hadoop-1.0.2,Zookeeper-3.3.4 ,HBase-0.4.0 .測(cè)試數(shù)據(jù)為某客運(yùn)站三個(gè)月的售票交易記錄.
2.2 測(cè)試過(guò)程與性能對(duì)比
本小節(jié)將通過(guò)測(cè)試來(lái)對(duì)比未建立二級(jí)索引與建立二級(jí)索引的海量數(shù)據(jù)的查詢效率.
測(cè)試數(shù)據(jù)以Json形式進(jìn)行返回,如下所示.
"returnCode":"OK","returnMsg":null,"data":"[{"stationId":"1233334567","sendDate":"2016-02-09","lineNo":"123","shiftNo":"1234","re7alSell":35,"remainSeat":6,"realSend":34,"sendStatus":"1"}]"}
測(cè)試步驟:
圖2 建立二級(jí)索引性能比較圖
(1)在master上進(jìn)行查詢;
(2)在未設(shè)計(jì)二級(jí)索引的基礎(chǔ)上,對(duì)實(shí)際售票量進(jìn)行查詢,并記錄數(shù)據(jù)的查詢時(shí)間;
(3)在設(shè)計(jì)二級(jí)索引stationId(客運(yùn)站編號(hào))的基礎(chǔ)上,對(duì)實(shí)際售票量進(jìn)行查詢,并記錄數(shù)據(jù)的查詢時(shí)間;
(4)在測(cè)試過(guò)程中,通過(guò)多次測(cè)試,來(lái)統(tǒng)計(jì)每次測(cè)試的平均值;
通過(guò)以上測(cè)試步驟得到性能對(duì)比圖2.
從圖2可以看出,若未對(duì)存儲(chǔ)在HBase中的數(shù)據(jù)設(shè)計(jì)二級(jí)索引stationId(客運(yùn)站編號(hào)),進(jìn)行實(shí)際售票量查詢時(shí),無(wú)論查詢的數(shù)據(jù)量有多少,查詢耗時(shí)在5000多秒.當(dāng)對(duì)數(shù)據(jù)設(shè)計(jì)二級(jí)索引stationId(客運(yùn)站編號(hào))后,查詢時(shí)間有較大幅度的減少,查詢100條記錄,花費(fèi)時(shí)間為80 s左右,查詢1000條數(shù)據(jù)耗時(shí)在200多秒左右.較大幅度的提高了查詢性能.滿足了基于非主鍵快速查詢的要求.
本文主要研究了在云計(jì)算平臺(tái)Hadoop下,分布式計(jì)算框架HBase中海量數(shù)據(jù)的查詢策略的研究.通過(guò)在HBase中設(shè)計(jì)二級(jí)索引來(lái)提高海量數(shù)據(jù)的查詢效率,改進(jìn)了HBase原有的只支持基于主鍵的查詢方式,并保證索引數(shù)據(jù)的最終一致性.雖然建立二級(jí)索引會(huì)在一定程度上影響數(shù)據(jù)寫(xiě)入的性能,增加了數(shù)據(jù)寫(xiě)入的時(shí)間,但造成的時(shí)間代價(jià)是可接受的.通過(guò)實(shí)驗(yàn)的分析結(jié)果表明,對(duì)存儲(chǔ)在HBase中的海量數(shù)據(jù)建立二級(jí)索引會(huì)使HBase的查詢性能得到良好的提升.
[1]王珊,王會(huì)舉,覃雄派等.架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望[J].計(jì)算機(jī)學(xué)報(bào),2011(10).
[2]施磊磊,施化吉,束長(zhǎng)波,宋玉平.基于Hadoop和HBase的分布式索引模型的研究[J].信息技術(shù),2016(6).
[3]周勝群,于治樓,宋欣,李晶.基于云計(jì)算的海量數(shù)據(jù)處理系統(tǒng)框架研究[J].信息技術(shù)與信息化,2014(3).
[4]吳朱化.云計(jì)算核心技術(shù)剖析[M].人民郵電出版社,2011:16.
Research on massive data query technology based on cloud computing framework
YANG Fen
(Information Engineering Department,Changzhi Professional College of Technology,Changzhi Shanxi 046000,China)
Nowadays,the cloud computing has gradually become popular in all walks of life in the community are in a wide range of applications.Cloud computing platform is a very important application of massive data storage and query processing.Traditional relational database has been unable to meet the requirements of mass data storage and efficient query.This prompted the NoSQL database came into being,such as HBase.In this paper,the distributed computing framework Hadoop as an example,will focus on the distributed database HBase in the massive data query methods and strategies.The research of this paper provides a new way of thinking for the research of massive data.
cloud computing;massive data query;Hadoop;HBase
2016-11-14
楊 芬(1973-),女,山西長(zhǎng)治人,講師,研究方向?yàn)橛?jì)算機(jī)理論與教學(xué).
TP311
A
2095-185X(2017)02-0047-03