張福錚+黃文琦+陳華軍+郭曉斌+陳承志
摘 要: 針對配用電海量時間序列數(shù)據(jù),目前南方電網(wǎng)普遍采用關(guān)系型數(shù)據(jù)庫進(jìn)行存儲,在技術(shù)上使用分庫、分區(qū)、分表、聯(lián)合索引等方式進(jìn)行優(yōu)化,靈活性、可擴(kuò)展性、存儲量等方面都存在問題。為滿足配用電海量時間序列數(shù)據(jù)的存儲要求,分析了關(guān)系型數(shù)據(jù)庫優(yōu)缺點(diǎn),提出采用分布式數(shù)據(jù)庫HBase構(gòu)建電力系統(tǒng)數(shù)據(jù)中心以提高系統(tǒng)性能,并重點(diǎn)分析了HBase數(shù)據(jù)存儲機(jī)制及實(shí)現(xiàn)方法,最后通過仿真實(shí)驗(yàn)進(jìn)行對比。實(shí)驗(yàn)結(jié)果表明,基于HBase的配用電海量時間序列數(shù)據(jù)存取技術(shù)在存儲及查詢操作上具有較大的性能優(yōu)勢。
關(guān)鍵詞: 配用電; 時間序列數(shù)據(jù); 南方電網(wǎng); 分布式數(shù)據(jù)庫; 存儲機(jī)制; 仿真實(shí)驗(yàn)
中圖分類號: TN911?34; TP333 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2017)13?0159?05
Abstract: The relational database is widely used in the Southern Power Grid to store the massive time series data of distribution grid, and the technology modes of sub?library, zoning, sub?table and unified index used for optimization have the problems in the aspects of flexibility, scalability and storage capacity. To meet the requirements of massive time series data storage of distribution grid, the advantages and disadvantages of the relational database are analyzed, and a distributed database HBase is presented to construct the data center of the electric power system to improve the system performance. The HBase data storage mechanism and implementation method are analyzed emphatically. The simulation experiments are carried out to compare the performance. The experimental results show that the HBase?based massive time series data storage technology of distribution grid has great performance advantages in storage and query operation.
Keywords: distribution grid; time series data; China Southern Power Grid; distributed database; storage mechanism; simulation experiment
0 引 言
近幾年,智能化伴隨著電子信息技術(shù)的發(fā)展逐步深入電網(wǎng),智能電網(wǎng)成為電力行業(yè)研究和應(yīng)用的熱點(diǎn)[1]。智能電網(wǎng)的重要特征之一便是電網(wǎng)的信息化,為應(yīng)對電網(wǎng)工作中的各種變化,需逐步推進(jìn)信息獲取、傳送與存儲利用的變革,從而形成供電網(wǎng)絡(luò)的全面自動化[2]。在南方電網(wǎng)范圍內(nèi),基于配網(wǎng)自動化、計(jì)量自動化、實(shí)時數(shù)據(jù)中心的配用電海量時間序列數(shù)據(jù),目前還是運(yùn)用關(guān)系型的數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲管理。
傳統(tǒng)關(guān)系型數(shù)據(jù)庫如MySQL,Oracle等得到了較為廣泛的傳播和應(yīng)用,海量數(shù)據(jù)的存儲解決方案也主要使用關(guān)系型數(shù)據(jù)庫。傳統(tǒng)關(guān)系型數(shù)據(jù)庫基于關(guān)系和對象模型,對復(fù)雜數(shù)據(jù)存儲有較高的表現(xiàn)力。然而隨著用電信息采集、配電自動化等系統(tǒng)不斷完善,配用電環(huán)節(jié)產(chǎn)生的數(shù)據(jù)逐漸呈現(xiàn)出海量、數(shù)據(jù)項(xiàng)復(fù)雜、處理邏輯復(fù)雜、存儲周期長、計(jì)算頻度高等大數(shù)據(jù)特征,因此對于數(shù)據(jù)量的存儲技術(shù)要求不斷提高,關(guān)系型數(shù)據(jù)庫漸漸無法滿足海量數(shù)據(jù)存儲對可擴(kuò)展性的要求[3?4]。
隨著HBase技術(shù)的不斷發(fā)展,為解決電力設(shè)備數(shù)據(jù)存儲遇到的各種問題提供了新的解決思路。結(jié)合配用電海量時間序列數(shù)據(jù)的特點(diǎn)和國內(nèi)電網(wǎng)公司的應(yīng)用需求,本文用HBase構(gòu)建一個分布式、可伸縮的時間序列數(shù)據(jù)庫。首先介紹了HBase數(shù)據(jù)存儲技術(shù)及應(yīng)用優(yōu)勢,隨后對系統(tǒng)架構(gòu)及系統(tǒng)存儲實(shí)現(xiàn)等進(jìn)行分析和設(shè)計(jì),最后,對設(shè)計(jì)的存儲系統(tǒng)進(jìn)行性能測試,驗(yàn)證了本文所提方案在智能電網(wǎng)海量時間序列數(shù)據(jù)處理上的性能優(yōu)勢。
1 HBase分布式數(shù)據(jù)庫
1.1 HBase技術(shù)
關(guān)系型數(shù)據(jù)庫在20世紀(jì)70年代提出,由于基礎(chǔ)訪問簡單,操作便捷,在之后便迅速發(fā)展成主流架構(gòu)模型,其中包括關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合以及關(guān)系完整性約束。關(guān)系型數(shù)據(jù)庫經(jīng)過長久發(fā)展已相當(dāng)成熟,如:Informix,Oracle,access,DB2,MySQL,SQLServer,Sybase等均在系統(tǒng)應(yīng)用中被廣泛使用,這些數(shù)據(jù)庫對操作權(quán)限都有很好的控制能力[5]。在電網(wǎng)業(yè)務(wù)中,時間序列數(shù)據(jù)往往被抽象為結(jié)構(gòu)化的數(shù)據(jù)模型,存儲在關(guān)系型數(shù)據(jù)庫中,而關(guān)系型數(shù)據(jù)庫的行列模式在存儲不同采樣周期的時間序列數(shù)據(jù)時,會造成存儲空間的極大浪費(fèi),查詢效率也隨著數(shù)據(jù)規(guī)模的增大而降低。
不同于傳統(tǒng)面向行存儲的關(guān)系數(shù)據(jù)庫,HBase(Hadoop Database)[6?7]是一種面向列存儲的非關(guān)系型數(shù)據(jù)庫,具有高可擴(kuò)展性、高可靠性等特性,是一種高性能的分布式數(shù)據(jù)庫,設(shè)計(jì)之初便是針對海量數(shù)據(jù)(TB或PB級別)的存儲和高速讀寫,用以解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時的理論和實(shí)現(xiàn)上的局限性。HBase在非結(jié)構(gòu)化、大數(shù)據(jù)存儲、分析方面具有較強(qiáng)性能,相比關(guān)系型數(shù)據(jù)庫更適合配用電海量時間序列數(shù)據(jù)的存取實(shí)現(xiàn)。文獻(xiàn)[8]在電力系統(tǒng)中證明了HDFS,HBase分布式計(jì)算的效率高于Oracle集中存儲式傳統(tǒng)計(jì)算的效率。文獻(xiàn)[9]提出了基于Hadoop和HBase的輸電線路綜合數(shù)據(jù)的存儲方案,有效地解決了非結(jié)構(gòu)化數(shù)據(jù)難以存儲的問題。文獻(xiàn)[10]借鑒當(dāng)今較為成熟的開源分布式NoSQL列式數(shù)據(jù)庫HBase,面向電網(wǎng)大數(shù)據(jù)設(shè)計(jì)并研發(fā)了分布式實(shí)時數(shù)據(jù)庫管理系統(tǒng)。HBase存儲技術(shù)得到了飛快的應(yīng)用。
1.2 HBase架構(gòu)
HBase居于NoSQL[11]和關(guān)系數(shù)據(jù)庫之間,HBase的系統(tǒng)架構(gòu)如圖1所示。
系統(tǒng)采用主/從(Master/Slave)的體系結(jié)構(gòu),由客戶端庫(Client),分布式協(xié)調(diào)服務(wù)組件(Zookeeper),主服務(wù)器(HMaster,HBase Master Server),多臺Region服務(wù)器(Region Server),以及底層文件系統(tǒng)(HDFS)構(gòu)成。HDFS是建立在大型集群上可靠存儲大數(shù)據(jù)的文件系統(tǒng),是分布式計(jì)算的存儲基石[12]。基于HFDS的HBase能夠很好地支持海量數(shù)據(jù)的存儲。
HBase存儲的是一張物理表,實(shí)質(zhì)是一個分布式的多維度排列的持久化映射,HBase中的數(shù)據(jù)依靠行關(guān)鍵字(Row Key)、列關(guān)鍵字(Column)、時間戳(Timestamp)進(jìn)行檢索并生成索引實(shí)現(xiàn)映射[13]。HBase以列為基本單位,一列或者多列構(gòu)成行,行和列的交叉點(diǎn)為一個單元格(Cell),其內(nèi)容是不可分割的字節(jié)數(shù)組,由時間戳來標(biāo)識。
HBase概念視圖如表1所示。在HBase中數(shù)據(jù)存儲時,行數(shù)據(jù)的存儲和管理是嚴(yán)格按照字典順序進(jìn)行,當(dāng)Table數(shù)據(jù)量不斷增大時,會自動分裂形成多個HRegion,不同的HRegion可以用StartKey和EndKey來標(biāo)識,并分配給相應(yīng)的HRegionServer管理。
2 基于HBase配用電海量時間序列數(shù)據(jù)存儲技術(shù)
2.1 配用電海量時間序列數(shù)據(jù)存儲技術(shù)
在電網(wǎng)業(yè)務(wù)中,數(shù)據(jù)采集的對象多且復(fù)雜,包括變電站設(shè)備、配電饋線設(shè)備、用戶用電設(shè)備以及各類計(jì)量裝置等各類設(shè)備的運(yùn)行參數(shù)和狀態(tài)信息。時間序列數(shù)據(jù)是指按照時間順序取得的一系列觀測值,是一種重要的非結(jié)構(gòu)化數(shù)據(jù)類型,在營銷、生產(chǎn)、調(diào)控、運(yùn)行監(jiān)控等多方面有著深入而廣泛的應(yīng)用[14]。隨著該類數(shù)據(jù)量的急劇增長,存儲空間需求越來越大,傳統(tǒng)數(shù)據(jù)庫處理能力逐漸無法滿足要求。
2.2 HBase數(shù)據(jù)表的設(shè)計(jì)
HBase作為一種列存儲數(shù)據(jù)庫,數(shù)據(jù)的排序和檢索都依靠Row Key進(jìn)行,它關(guān)系到以后數(shù)據(jù)存取的效率問題。因?yàn)槭欠顷P(guān)系型數(shù)據(jù)庫,Row Key中不僅要包含對應(yīng)數(shù)據(jù)各種屬性信息,而且要用最合理的方式進(jìn)行組合。為了提高數(shù)據(jù)導(dǎo)入效率和查詢效率,提出配用電數(shù)據(jù)的行關(guān)鍵字生成規(guī)則。
為方便數(shù)據(jù)查詢,表2設(shè)計(jì)行鍵為采集設(shè)備所在路號、采集時間的字符串組合,共有一個列族Info,該列族下只有一個列,用以存儲采集設(shè)備的MAC地址,便于構(gòu)建設(shè)備信息與采集設(shè)備MAC之間的映射。表3存儲了現(xiàn)場采集設(shè)備的采樣數(shù)據(jù)信息,行鍵為采集設(shè)備的MAC地址加電表ID的組合MAC:ID,HBase表中每行數(shù)據(jù)都帶有時間戳,插入數(shù)據(jù)的時候由HBase自動生成,表明該數(shù)據(jù)的采集時間。本文為了測試功能,僅僅設(shè)計(jì)了一個列族Current,Current下共有100列,即V1,V2,…,V100,表示一個工頻周期內(nèi)采集的100個數(shù)據(jù)點(diǎn),用于描述采樣點(diǎn)的采集數(shù)據(jù)信息。完成相應(yīng)的HBase表的設(shè)計(jì)后,接下來釆集點(diǎn)的信息就可以經(jīng)過一定的轉(zhuǎn)換寫入HBase中。
3 HBase配用電時間序列數(shù)據(jù)存儲實(shí)現(xiàn)
在數(shù)據(jù)存儲的過程中,預(yù)寫日志(Write?Ahead Log,WAL)和實(shí)際存儲數(shù)據(jù)文件是HBase存儲數(shù)據(jù)的主要形式。這兩種文件主要由HRegionServer進(jìn)行管理。數(shù)據(jù)到達(dá)HDFS后可能會以更小的塊的方式進(jìn)行存儲,由于HBase的?ROOT?表的相關(guān)信息存儲在Zookeeper里, Client首先聯(lián)系Zookeeper集群查找行鍵(Row Key),客戶端獲取存儲?ROOT?表的對應(yīng)Region節(jié)點(diǎn),從?ROOT?表中獲取.META.表的信息,其中包含請求的行鍵信息,.META.表所在服務(wù)器的信息在本地得以緩存,每次通過.META.服務(wù)器即可獲取客戶端查詢的行鍵數(shù)據(jù)所在Region的服務(wù)器名。
3.1 HBase數(shù)據(jù)上傳
數(shù)據(jù)上傳HBase過程如圖2所示。為模擬實(shí)際場景里的數(shù)據(jù)產(chǎn)生網(wǎng)絡(luò),實(shí)驗(yàn)中使用一臺PC機(jī)當(dāng)做數(shù)據(jù)生成發(fā)送端。每條數(shù)據(jù)包括采樣數(shù)據(jù)的各個采樣點(diǎn),各個數(shù)據(jù)之間用逗號隔開。數(shù)據(jù)接收端也是存儲客戶端,完成從發(fā)送端接收實(shí)時數(shù)據(jù)并上傳到HBase的功能。
3.2 HBase寫數(shù)據(jù)流程
現(xiàn)在的HBase數(shù)據(jù)庫都是通過WAL保證HBase的可靠性,當(dāng)數(shù)據(jù)在寫入到HRegion前都將封裝各WAL,并被寫入到HLog,HLog會被同步到所在文件系統(tǒng),保證HBase的可用性以及遭遇故障后的可恢復(fù)性。圖3大致描述了HBase寫操作時的執(zhí)行流程。具體步驟為:
(1) Client發(fā)起數(shù)據(jù)寫請求給HRegionServer,并將請求匹配到將被寫入的HRegion上面;
(2) 將數(shù)據(jù)寫入到MemStore中,并同時檢查MemStore狀態(tài);
(3) 封裝相應(yīng)的WAL,并將日志同步到底層的文件系統(tǒng);
(4) 判斷MemStore是否滿,是,則將MemStore中的數(shù)據(jù)Flush到文件系統(tǒng);
(5) Flush請求被HRegionServer處理,數(shù)據(jù)被寫成HFile文件并存到HDFS,寫操作基本完成。
3.3 HBase讀數(shù)據(jù)流程
HBase數(shù)據(jù)庫是嚴(yán)格按照HTable的Row Key進(jìn)行存儲的,并且HBase還會為Row Key建立索引。所以可以運(yùn)用這一機(jī)制,把經(jīng)常作為條件進(jìn)行查找的列組合到Row Key設(shè)計(jì)中,這樣就相當(dāng)于給這些列建立了相關(guān)的索引。本文只研究以二維表的方式建立索引。讀取一條完整的數(shù)據(jù)記錄的過程如圖4所示。
在使用HBase的存儲模型來存儲索引表時,由于HBase的特性索引表同樣會被分Region進(jìn)行存儲,因此訪問索引表的過程也會存在一個定位操作。
由圖4可以看出,當(dāng)用戶讀取數(shù)據(jù)時,要對HBase進(jìn)行兩次查找。由于索引表也是HTable,所以運(yùn)用HTable的特性,把要查找的列定為索引表的Row Key,而索引表對應(yīng)的數(shù)據(jù)表的Row Key和Time Stamp設(shè)計(jì)為索引表的Value??梢钥闯?,HBase讀取一次數(shù)據(jù)需要進(jìn)行兩次訪問,兩次均以Row Key方式訪問,而非全表掃描,所以當(dāng)數(shù)據(jù)量很大時,這種二級索引的方式非常有效。
4 仿真試驗(yàn)對比
4.1 實(shí)驗(yàn)環(huán)境
硬件環(huán)境:3臺服務(wù)器,1個Namenode,2個Datanode,其中Namenode為CPU四核八線程,內(nèi)存4 GB,硬盤1 TB,Datanode為CPU雙核四線程,內(nèi)存2 GB,硬盤500 GB;軟件環(huán)境:操作系統(tǒng)為Ubuntu 10.10,相關(guān)軟件版本:Hadoop分布式安裝Hadoop 1.0.3,HBase版本為0.96.2,Zookeeper版本為3.4.5,JDK 1.6.0,MySQL版本為5.5。
4.2 存儲性能測試
測試用例設(shè)計(jì)的目的是為了通過模擬用戶的行為,對系統(tǒng)在實(shí)際應(yīng)用中的情況進(jìn)行性能測試。設(shè)計(jì)完整個系統(tǒng)后,為了評價基于HBase的海量時間序列數(shù)據(jù)存儲的性能,要對HBase集群的性能進(jìn)行測試,具體到HBase集群中就是對數(shù)據(jù)的存儲及查詢操作。為對比HBase 0.96.2和MySQL 5.5的存儲、查詢等性能指標(biāo),由三臺配置相同的Hadoop集群組成分布式文件系統(tǒng),構(gòu)成一個邏輯HBase集群,同時由一臺機(jī)器測試MySQL。所設(shè)計(jì)測試平臺具有存儲、查詢和顯示等常用功能,并記錄了測試數(shù)據(jù)和測試日志,為以后進(jìn)一步的比對測試提供依據(jù)。
在前面搭建的HBase集群上,采用固定單個文件大小且增大文件數(shù)量的方法進(jìn)行測試,單個文件大小約為5 MB,文件數(shù)量由2個增至200個。每次測試都重復(fù)三次,采取取平均值的方式確定最后的測試結(jié)果。測試結(jié)果如圖5所示。圖6顯示的是對數(shù)據(jù)進(jìn)行寫入操作過程中的延時性能情況。
從圖5中可以看出,當(dāng)文件個數(shù)較小時,HBase數(shù)據(jù)中心與MySQL數(shù)據(jù)中心的性能相差不大,但當(dāng)插入文件數(shù)持續(xù)增大時,MySQL的存儲耗時出現(xiàn)較大波動,而HBase耗時變化幅度相對較小,數(shù)據(jù)寫入HBase數(shù)據(jù)庫的時間遠(yuǎn)小于MySQL數(shù)據(jù)庫的時間。寫入文件個數(shù)為200時,MySQL消耗時間75.3 min,而HBase數(shù)據(jù)中心消耗時間約39.7 min,數(shù)據(jù)寫入時間縮短約47.3%,優(yōu)勢明顯?;贖Base開源系統(tǒng),由于頻繁觸發(fā)Split和Compaction會造成數(shù)據(jù)讀寫延遲,圖6是數(shù)據(jù)進(jìn)行寫入操作過程中的延時性能情況,可知,HBase的延時性能隨著數(shù)據(jù)的增多不會出現(xiàn)較大的波動,而MySQL波動則相對較大,隨著時間的推移愈加明顯。
4.3 查詢性能實(shí)驗(yàn)測試
對HBase集群進(jìn)行查詢性能測試,測試兩種解決方案在讀取數(shù)據(jù)量為1 000~100 000的查詢性能,見圖7。
從圖7可以看出,在數(shù)據(jù)量較少時,HBase比MySQL耗時稍多。隨著數(shù)據(jù)量的增大,HBase耗時增加,但幅度變化不大,而MySQL查詢耗時隨數(shù)據(jù)量的增長上升很快,在100 000數(shù)據(jù)條數(shù)時的耗時是HBase的2.8倍。
圖8是數(shù)據(jù)延時情況對比,從圖8中可以看出,在數(shù)據(jù)查詢時,兩種情況下的時間延時均沒有較大波動,HBase相較MySQL延時時間的變化更加平緩,系統(tǒng)運(yùn)行更加穩(wěn)定。
5 結(jié) 語
本文從智能電網(wǎng)的要求出發(fā),針對傳統(tǒng)的數(shù)據(jù)存儲方法在處理海量時間序列數(shù)據(jù)上存在的不足,提出一種基于HBase的數(shù)據(jù)存儲方案,適合于配用電海量時間序列數(shù)據(jù)的存儲,并且給出了存儲方案實(shí)現(xiàn)的具體系統(tǒng)架構(gòu)及存儲原理,最后與傳統(tǒng)關(guān)系數(shù)據(jù)庫MySQL在存儲與查詢效率方面做了對比測試。結(jié)果表明,本文方法在配用電海量時間序列數(shù)據(jù)的數(shù)據(jù)存儲與查詢等方面具有顯著優(yōu)勢。
參考文獻(xiàn)
[1] DIAMANTOULAKIS P D, KAPINAS V M, KARAGIANNIDIS G K. Big data analytics for dynamic energy management in smart grids [J]. Big data research, 2015, 2(3): 94?101.
[2] 陳春霖,陳琰.信息化服務(wù)“智能電網(wǎng)”的初步探索[J].華東電力,2009,37(6):895?898.
[3] 宋亞奇,周國亮,朱永利.智能電網(wǎng)大數(shù)據(jù)處理技術(shù)現(xiàn)狀與挑戰(zhàn)[J].電網(wǎng)技術(shù),2013,37(4):927?935.
[4] 任凱,鄧武,俞琰.基于大數(shù)據(jù)技術(shù)的網(wǎng)絡(luò)日志分析系統(tǒng)研究[J].現(xiàn)代電子技術(shù),2016,39(2):39?41.
[5] 喬曉明, 陳有為.基于SQL Server構(gòu)建數(shù)據(jù)挖掘應(yīng)用[J].現(xiàn)代電子技術(shù),2011,34(4):35?37.
[6] 葛微,羅圣美,周文輝,等.HiBase:一種基于分層式索引的高效HBase查詢技術(shù)與系統(tǒng)[J].計(jì)算機(jī)學(xué)報,2016,39(1):140?153.
[7] 雷曉鳳,李強(qiáng),孫功星.基于HBase的高能物理數(shù)據(jù)存儲及分析平臺[J].計(jì)算機(jī)工程,2015,41(6):49?56.
[8] 張明,王瑋,施建華,等.電力大數(shù)據(jù)調(diào)度云的優(yōu)化[J].計(jì)算機(jī)仿真,2014,31(11):123?126.
[9] 于恒友,劉波,彭子平.基于HBase的輸電線路綜合數(shù)據(jù)存儲方案設(shè)計(jì)[J].電力科學(xué)與技術(shù)學(xué)報,2014,29(2):58?64.
[10] 崔文順,張芷怡,袁力哲,等.基于云計(jì)算的日光溫室群物聯(lián)網(wǎng)服務(wù)平臺[J].計(jì)算機(jī)工程,2015,41(6): 294?299.
[11] 吳燕波,薛琴,向大為,等.云平臺下的NoSQL分布式大數(shù)據(jù)存儲技術(shù)與應(yīng)用[J].現(xiàn)代電子技術(shù),2016,39(9):44?47.
[12] 孟海東,肖銀龍,宋宇辰.基于Hadoop的Dirichlet樸素貝葉斯文本分類算法[J].現(xiàn)代電子技術(shù),2016,39(4):29?33.
[13] CHANG V, WILLS G. A model to compare cloud and non?cloud storage of big data [J]. Future generation computer systems, 2016, 57: 56?76.
[14] 劉博,郭建勝.改進(jìn)的多元時間序列符號化表示方法研究[J].計(jì)算機(jī)仿真,2015,32(1):314?317.