孫旭+束曉敏+葉潤武+史昇+鐘艷+高亞紅
摘 要:關(guān)系型數(shù)據(jù)庫由于面向行存儲以及無法擴(kuò)展等原因,已很難滿足大規(guī)模車聯(lián)網(wǎng)傳感數(shù)據(jù)的存儲與查詢要求。針對該問題,設(shè)計了一個基于非關(guān)系型數(shù)據(jù)庫HBase存儲的車聯(lián)網(wǎng)傳感數(shù)據(jù)管理系統(tǒng)。該系統(tǒng)采用Hadoop與HBase搭建分布式實(shí)驗(yàn)平臺,采用C#語言開發(fā)Web網(wǎng)頁端。通過與傳統(tǒng)關(guān)系型數(shù)據(jù)庫SQL Server的存儲與查詢效率進(jìn)行對比分析,表明HBase在處理大規(guī)模車聯(lián)網(wǎng)傳感數(shù)據(jù)方面具有明顯優(yōu)勢。
關(guān)鍵詞關(guān)鍵詞:HBase;車聯(lián)網(wǎng);Thrift;C#.Net
DOIDOI:10.11907/rjdk.161481
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2016)008-0071-03
0 引言
隨著車聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,車聯(lián)網(wǎng)終端傳感器數(shù)量不斷增多,分布范圍也越來越廣,從而使傳感器采集的數(shù)據(jù)量飛速增長[1]。例如,一個車聯(lián)網(wǎng)傳感器大約10秒采集一次數(shù)據(jù),一輛車大約有100個傳感器,則一輛車一天采集到的數(shù)據(jù)量大概有90萬條,一輛車一年產(chǎn)生的數(shù)據(jù)量大約是3億多條。然而,傳統(tǒng)關(guān)系型數(shù)據(jù)庫存儲這么龐大的數(shù)據(jù)量是非常困難的,雖然Oracle等也曾提出過針對大數(shù)據(jù)存儲的解決方案,但是這些方案沒有脫離傳統(tǒng),都是基于關(guān)系和面向?qū)ο竽P偷模潆m然能夠處理相對復(fù)雜的數(shù)據(jù),存儲數(shù)據(jù)的代價卻非常大[2]。
近年來,云計算技術(shù)發(fā)展迅速,源自谷歌BigTable的HBase分布式存儲數(shù)據(jù)庫很好地解決了大數(shù)據(jù)存儲問題[3]。由于采用分布式列存儲形式,所以相對于關(guān)系型數(shù)據(jù)庫MySql、SQLServer等具有查詢效率高、所需存儲空間小等優(yōu)勢[4]。車聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng)采用C#開發(fā)網(wǎng)頁端,通過C#連接HBase數(shù)據(jù)庫并實(shí)現(xiàn)對HBase數(shù)據(jù)庫中數(shù)據(jù)的查詢和顯示。由于HBase是Java開發(fā)的,所以HBase提供了豐富的Java接口,對于其它語言,需要采用HBase中內(nèi)置的Thrift組件來實(shí)現(xiàn)C#接口的轉(zhuǎn)換以及與HBase的連接[5]。
1 車聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng)相關(guān)原理
1.1 HBase
HBase是一個面向列的分布式數(shù)據(jù)庫,可以隨時讀寫大規(guī)模數(shù)據(jù),彌補(bǔ)了HDFS不支持隨機(jī)讀寫的不足。它的表結(jié)構(gòu)由行鍵、時間戳和列族組成[6]。HBase以HDFS分布式文件系統(tǒng)為底層支撐,HBase中的數(shù)據(jù)文件存儲在分布式文件系統(tǒng)中。HBase可以簡單地通過增加節(jié)點(diǎn)達(dá)到線性擴(kuò)展,能夠在廉價硬件構(gòu)成的集群上管理超大規(guī)模的稀疏表[7]。
HBase系統(tǒng)主要由HBase Master服務(wù)器和Hregion服務(wù)器群構(gòu)成。它遵循簡單的主從服務(wù)器體系結(jié)構(gòu)模型。不管是HBase Master服務(wù)器還是HRegion服務(wù)器都由Zookeeper協(xié)調(diào)分配,并且由其處理HBase運(yùn)行之間出現(xiàn)的問題。而HRegion服務(wù)器則由HBase Master服務(wù)器調(diào)度和管理,并且所有數(shù)據(jù)都存儲在HRegion服務(wù)器中,主服務(wù)器不存儲任何數(shù)據(jù)[8]。HBase當(dāng)中的一張數(shù)據(jù)表在邏輯上可以被劃分為多個分區(qū),然后由主服務(wù)器進(jìn)行分配,將數(shù)據(jù)存儲到HRegion服務(wù)器中,而主服務(wù)器僅存儲邏輯分區(qū)與實(shí)際存儲數(shù)據(jù)的映射關(guān)系[9]。
HBase是一個系數(shù)的長期存儲、多維度、排序的映射表,其表的索引是行關(guān)鍵字(RowKey)、列關(guān)鍵字(Column Family)和時間戳(TimeStamp)。HBase中的數(shù)據(jù)都是字符串類型,沒有其它數(shù)據(jù)類型。
如表1所示,該表由兩行組成:R1和R2,有兩個列族:C1和C2。在第一行中,列族C1有3條數(shù)據(jù),列族C2有1條數(shù)據(jù);在第二行中,列族C1有1條數(shù)據(jù),列族C2有1條數(shù)據(jù)。每一條數(shù)據(jù)對應(yīng)的時間戳都用數(shù)字來表示,根據(jù)時間戳來區(qū)分不同版本的數(shù)據(jù)。
1.2 車聯(lián)網(wǎng)
車輛通過GPS、RFID、傳感器等設(shè)備完成自身環(huán)境和狀態(tài)信息的采集;通過各種無線通信技術(shù),車輛將采集到的自身傳輸數(shù)據(jù)匯集到中央處理器;信息處理平臺根據(jù)不同的功能需求,將這些信息進(jìn)行拆分和處理,從而實(shí)現(xiàn)車輛導(dǎo)航、車輛狀態(tài)和位置監(jiān)控、車輛控制和引導(dǎo)等,為用戶提供安全、環(huán)保、便利的服務(wù)。
車聯(lián)網(wǎng)數(shù)據(jù)具有數(shù)據(jù)規(guī)模大、種類多樣、工作環(huán)境比較復(fù)雜、數(shù)據(jù)處理時效性要求高等特點(diǎn),所以借助Hadoop大數(shù)據(jù)處理平臺和HBase分布式數(shù)據(jù)庫對車聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行有效管理顯得非常重要。
1.3 C#.Net網(wǎng)頁端
系統(tǒng)采用B/S結(jié)構(gòu),利用C#.Net技術(shù)結(jié)合HBase非關(guān)系型分布式數(shù)據(jù)庫構(gòu)建一個車聯(lián)網(wǎng)數(shù)據(jù)查詢系統(tǒng),該網(wǎng)頁可以讀取Hadoop平臺HBase數(shù)據(jù)表中的數(shù)據(jù)在前臺顯示,并供用戶查詢。涉及到的基本數(shù)據(jù)包括用戶信息、工況參數(shù)、監(jiān)控配置信息等,其中用戶信息包括用戶名和密碼等基本信息,工況參數(shù)記錄車輛運(yùn)行的數(shù)據(jù)和狀態(tài),監(jiān)控配置信息是對工況參數(shù)的描述。
HBase可完美地支持原生態(tài)Java API,但是其它非Java原生態(tài)語言不能直接訪問HBase。C#如果要訪問HBase數(shù)據(jù)庫,必須使用HBase內(nèi)置的Thrift接口來操作HBase數(shù)據(jù)表中的數(shù)據(jù)。
2 車聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng)總體架構(gòu)
系統(tǒng)采用瀏覽器/服務(wù)器模式,用Hadoop集群代替?zhèn)鹘y(tǒng)服務(wù)器,在Hadoop集群之上搭建分布式數(shù)據(jù)庫HBase來存儲數(shù)據(jù)。如圖1所示,部署在網(wǎng)站服務(wù)器上IIS的C#網(wǎng)頁端通過IIS服務(wù)器訪問Hadoop集群。
圖2顯示了整個系統(tǒng)的數(shù)據(jù)流。首先,通過車內(nèi)傳感器采集車聯(lián)網(wǎng)傳感數(shù)據(jù),然后傳感器將采集到的數(shù)據(jù)通過CAN總線傳送到每輛車內(nèi)的電控系統(tǒng)ECU,ECU通過集成在芯片內(nèi)的WiFi或GPRS模塊將數(shù)據(jù)發(fā)送到Hadoop集群,集群對數(shù)據(jù)進(jìn)行簡單處理并插入到HBase數(shù)據(jù)庫,最后,C#網(wǎng)頁端通過Thrift插件訪問HBase并將數(shù)據(jù)展現(xiàn)給用戶。
3 系統(tǒng)實(shí)現(xiàn)與結(jié)果分析
3.1 平臺搭建與數(shù)據(jù)庫設(shè)計
由于Zookeeper運(yùn)行在奇數(shù)個節(jié)點(diǎn)上更穩(wěn)定,本系統(tǒng)的Hadoop集群采用5個節(jié)點(diǎn)(一主四從)為例搭建完成。節(jié)點(diǎn)操作系統(tǒng)采用CentOS6.5-64位系統(tǒng),jdk(Java Development Kit)采用jdk7,Hadoop采用hadoop-1.2.1穩(wěn)定版本,HBase采用hbase-0.94.18版本,Zookeeper不使用HBase內(nèi)置zookeeper,而采用單獨(dú)的zookeeper-3.4.5版本,Thrift采用HBase內(nèi)置的版本。
本系統(tǒng)數(shù)據(jù)庫主要包括用戶、ECU、工況參數(shù)以及工況參數(shù)描述等信息。
User表:該表用來存放用戶信息,主要包括用戶名、密碼、用戶權(quán)限等。把UserID作為行鍵RowKey,UserInfo作為列族,UserName、Password、RoleName分別作為列族UserInfo的3列,概念視圖如表2所示。
ECU表:該表用來存放ECU信息,主要包括ECU位置以及車主信息。把ECUID作為RowKey,ECUInfo作為列族,ECUInfo分別包括location和owner兩列,概念視圖如表3所示。
Data表:Data表用來存放工況參數(shù),主要包括發(fā)動機(jī)轉(zhuǎn)速、電壓、電流、踏板開度等參數(shù)。ECUID將作為行鍵RowKey,新建DataInfo列族,列族中包括speed、voltage、current、open等列,概念視圖如表4所示。
3.2 C#網(wǎng)頁端設(shè)計
系統(tǒng)采用B/S架構(gòu),通過C# API讀取HBase中的數(shù)據(jù),并將獲取的數(shù)據(jù)通過瀏覽器顯示到網(wǎng)頁上供用戶查看,使用戶能實(shí)時了解自己車輛的狀態(tài)并及時采取相關(guān)措施。在B/S模型中,客戶通過客戶端的瀏覽器軟件向B/S服務(wù)器端發(fā)送訪問請求;B/S服務(wù)器端接到訪問請求,對接收到的請求進(jìn)行處理;服務(wù)器端將訪問請求生成SQL語句,向數(shù)據(jù)庫驗(yàn)證該語句的合法性并進(jìn)行數(shù)據(jù)處理;處理完后的數(shù)據(jù)返回B/S服務(wù)器,由服務(wù)器將結(jié)果返回瀏覽器;最終瀏覽器以Web網(wǎng)頁樣式展現(xiàn)出結(jié)果。
整個C#網(wǎng)頁端采用MVC的設(shè)計模式,即Model(數(shù)據(jù)模型)、View(視圖)、Controller(控制器)模式。通過業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法將繁多的代碼組織起來。其中Model提供要展示的數(shù)據(jù),包含數(shù)據(jù)和業(yè)務(wù),提供了模型數(shù)據(jù)查詢和模型數(shù)據(jù)的狀態(tài)更新等功能;View負(fù)責(zé)進(jìn)行模型展示,即一般見到的用戶界面;Controller接收用戶請求,委托給模型進(jìn)行處理,處理完后把返回的模型數(shù)據(jù)返回視圖,由視圖負(fù)責(zé)展示,控制器起到了調(diào)度作用。
C#網(wǎng)頁端通過Thrift插件訪問HBase數(shù)據(jù)庫,通過HBaseAdmin和HTable類設(shè)計C#訪問HBase數(shù)據(jù)庫接口。系統(tǒng)通過網(wǎng)頁將車聯(lián)網(wǎng)各項(xiàng)數(shù)據(jù)顯示出來,使用戶能夠?qū)崟r查看自己車輛的狀態(tài)信息。
3.3 HBase與SQL Server查詢效率對比分析
HBase與SQL Server分別是傳統(tǒng)非關(guān)系型數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫的代表,它們之間存在著許多不同。HBase運(yùn)行在分布式Hadoop集群上,SQL Server運(yùn)行在單節(jié)點(diǎn)上;HBase面向列存儲,SQL Server面向行存儲;它們在底層的存儲形式、數(shù)據(jù)庫概念模型與邏輯模型也有很大不同。
在C#網(wǎng)頁端數(shù)據(jù)代碼查詢處添加秒表,分別連接HBase數(shù)據(jù)庫,以及原有的SQL Server數(shù)據(jù)庫。用get方法查詢HBase數(shù)據(jù)庫,用select方法查詢SQL Server數(shù)據(jù)庫。查詢相同的數(shù)據(jù),分別記錄查詢所用的時間,執(zhí)行多次查詢?nèi)∑骄担绫?所示。
由表5可以看出,隨著數(shù)據(jù)量增加,查詢時間也相應(yīng)增加,但都不是線性增加。當(dāng)數(shù)據(jù)量很小時,兩者查詢效率差別并不明顯,HBase消耗的時間甚至比SQL Server更多;但隨著數(shù)據(jù)量增加到10 000條時,SQL Server消耗的時間是HBase的4倍;當(dāng)數(shù)據(jù)量增加到100 000條時,SQL Server消耗的時間是HBase的8倍。數(shù)據(jù)量越大,兩者消耗時間的時間差越大,所以HBase更適合大規(guī)模數(shù)據(jù)的管理。在本系統(tǒng)中,HBase查詢效率之所以能達(dá)到SQL Server查詢效率的4~8倍,是因?yàn)镠Base是分布式列存儲結(jié)構(gòu),由整個集群共同工作,并且不需要查詢整行,只需要查詢相應(yīng)的列即可。
4 結(jié)語
本文設(shè)計了一種基于HBase的車聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng),采用Hadoop與HBase搭建數(shù)據(jù)處理平臺,設(shè)計了HBase數(shù)據(jù)庫,采用B/S架構(gòu)與MVC設(shè)計模型開發(fā)C#.NET網(wǎng)頁端。最后,將HBase數(shù)據(jù)庫與SQL Server數(shù)據(jù)庫作查詢效率對比測試。結(jié)果表明,HBase相對于傳統(tǒng)關(guān)系型數(shù)據(jù)庫SQL Server具有更高的效率和實(shí)時性。
參考文獻(xiàn):
[1]LARS,GEORGE.Hadoop權(quán)威指南[M].北京:人民郵電出版社,2013: 68-70.
[2]NICK,DIMIDUK.HBase實(shí)戰(zhàn)[M].北京:人民郵電出版社,2013: 23-26.
[3]馮曉普.HBase存儲的研究與應(yīng)用[D].北京:北京郵電大學(xué),2014: 24-25.
[4]李青云.基于HBase的應(yīng)用平臺的研究與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2015:9-10.
[5]魏巍.基于HBase的移動統(tǒng)計平臺的研究[D].青島:中國海洋大學(xué),2014:50-51.
[6]陳慶奎.基于HBase的大規(guī)模無線傳感網(wǎng)絡(luò)數(shù)據(jù)存儲系統(tǒng)[J].計算機(jī)應(yīng)用,2012,32(7):1920-1921.
[7]李堅(jiān).基于HBase的地震大數(shù)據(jù)存儲研究[J].大地測量與地球動力學(xué),2015,35(5): 891-891.
[8]張智.分布式存儲系統(tǒng)HBase關(guān)鍵技術(shù)研究[J].現(xiàn)代計算機(jī),2014,32(5):33-34.
[9]王蒙.基于HBase的農(nóng)業(yè)微博數(shù)據(jù)存儲與處理策略[J].中國農(nóng)機(jī)化學(xué)報,2014,35(3): 221-222.
(責(zé)任編輯:黃 ?。?