王勇++尹鵬飛++李娟
摘要:健康大數(shù)據(jù)已被納入國家大數(shù)據(jù)戰(zhàn)略布局,如何能夠收集有效的健康數(shù)據(jù),構(gòu)建高性能、高可靠性、低成本和具有良好可擴(kuò)展性的健康大數(shù)據(jù)平臺(tái)至關(guān)重要。傳統(tǒng)的單純利用Hadoop、HBase無法滿足復(fù)雜的業(yè)務(wù)需求和實(shí)時(shí)查詢的要求,同時(shí)性能方面也存在一些問題。分析了HBase的底層原理,對(duì)HBase的讀寫性能進(jìn)行優(yōu)化。借助Phoenix提供的SQL接口來操控HBase,可方便對(duì)集群和數(shù)據(jù)進(jìn)行管理。Phoenix針對(duì)HBase也提出了一系列優(yōu)化方案。利用HBase和Phoenix的特性構(gòu)建高性能的健康大數(shù)據(jù)平臺(tái)。實(shí)驗(yàn)結(jié)果表明,優(yōu)化后的健康大數(shù)據(jù)系統(tǒng)具有更好的讀寫性能,能夠更好地滿足大數(shù)據(jù)發(fā)展需求。
關(guān)鍵詞:健康大數(shù)據(jù);HBase;分布式數(shù)據(jù)庫;負(fù)載預(yù)測(cè)
DOIDOI:10.11907/rjdk.171146
中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:文章編號(hào):16727800(2017)010014604
0引言
通過移動(dòng)互聯(lián)網(wǎng)、智能設(shè)備和物聯(lián)網(wǎng)技術(shù),人們能夠隨時(shí)追蹤記錄自己當(dāng)前的生理健康指標(biāo)、運(yùn)動(dòng)狀況、飲食情況和其它生活習(xí)慣,這些數(shù)據(jù)的收集能夠幫助挖掘出更有價(jià)值的醫(yī)療信息。然而,技術(shù)的發(fā)展仍無法跟上數(shù)據(jù)增長的速度。對(duì)于大規(guī)模數(shù)據(jù)的存儲(chǔ)、管理和實(shí)時(shí)查詢?nèi)匀幻媾R很多問題,同時(shí)健康監(jiān)測(cè)數(shù)據(jù)也缺乏統(tǒng)一標(biāo)準(zhǔn),使大量數(shù)據(jù)無法共享利用,這無疑會(huì)影響健康監(jiān)測(cè)大數(shù)據(jù)的發(fā)展進(jìn)程。
本文對(duì)健康監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)與管理進(jìn)行研究,根據(jù)健康監(jiān)測(cè)數(shù)據(jù)的數(shù)據(jù)表示模型和數(shù)據(jù)形態(tài),采用HBase大數(shù)據(jù)平臺(tái)研究健康監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)與組織形式,實(shí)現(xiàn)了健康大數(shù)據(jù)的存儲(chǔ)和管理,并提供高并發(fā)的讀寫性能與可擴(kuò)展性。
HBase是參照Google Bigtable實(shí)現(xiàn)的NoSQL數(shù)據(jù)庫,有著天然的大數(shù)據(jù)存儲(chǔ)優(yōu)勢(shì)[1]。它具有強(qiáng)一致性、隨機(jī)讀寫、面向列,以及可動(dòng)態(tài)修改、可水平伸縮的特性[2]。HBase支持范圍查詢以及行事務(wù),可在廉價(jià)PC Server上搭建大規(guī)模的結(jié)構(gòu)化存儲(chǔ)集群。HBase非常適合于構(gòu)建高性能的健康大數(shù)據(jù)平臺(tái)。然而,HBase還處在高速發(fā)展時(shí)期,仍有一些問題需要解決。Apache的Phoenix為人們操作HBase提供了更加便捷的溝通方式,其提供了標(biāo)準(zhǔn)的SQL和JDBC API的力量與完整的ACID事務(wù)的能力和后期綁定的靈活性。目前,關(guān)于HBase性能的優(yōu)化和研究還存在著諸多現(xiàn)實(shí)問題,缺乏關(guān)鍵技術(shù)支持。本文重點(diǎn)研究了基于健康數(shù)據(jù)存儲(chǔ)的HBase集群的性能優(yōu)化與應(yīng)用,并采用HBase1.0.2版本、phoenix4.8版本進(jìn)行分析實(shí)驗(yàn),旨在提供一個(gè)高性能、高可用的健康大數(shù)據(jù)存儲(chǔ)和管理平臺(tái)。
1健康大數(shù)據(jù)平臺(tái)分析與優(yōu)化
1.1健康數(shù)據(jù)模型設(shè)計(jì)
中華人民共和國國家衛(wèi)生和計(jì)劃生育委員會(huì)于2011年8月發(fā)布了《城鄉(xiāng)居民健康檔案基本數(shù)據(jù)集》,規(guī)定了城鄉(xiāng)居民健康檔案基本數(shù)據(jù)集的元數(shù)據(jù)屬性和數(shù)據(jù)元目錄。通過研究與分析該數(shù)據(jù)集,構(gòu)建了統(tǒng)一的健康檔案存儲(chǔ)模型,并轉(zhuǎn)化成HBase的數(shù)據(jù)模型,進(jìn)行數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)。
選取《高血壓患者隨訪數(shù)據(jù)元專用屬性》作為案例進(jìn)行研究分析。表1是分析得到的高血壓關(guān)系模型。其中行鍵采用身份證號(hào)碼、醫(yī)院編號(hào)、醫(yī)療項(xiàng)目和時(shí)間戳的組合鍵。
其中,NumRegionServer可以采用集群中的RegionServer數(shù)目,有利于分擔(dān)數(shù)據(jù)讀寫壓力,但也不宜過多,否則會(huì)造成集群性能下降。
1.3HBase數(shù)據(jù)查詢優(yōu)化
HBase在0.92之后引入了協(xié)處理器(Coprocessors),能夠更好地建立二級(jí)索引、復(fù)雜過濾器、訪問控制等更為復(fù)雜的操作[5]。Phoenix則在此基礎(chǔ)上提供了更加方便的操作。Phoenix能夠用SQL的方式建立二級(jí)索引。Phoenix支持4種類型的索引技術(shù):Covered Indexes、Functional Indexes、Global Indexing和Local Indexing,這些索引技術(shù)分別適用于不同的業(yè)務(wù)場(chǎng)景,主要是偏重于讀或?qū)憽?/p>
可以通過如下方式直接為HBase創(chuàng)建索引:
CREATE INDEX BLOOD_PRESSURE_INDEX ON BLOOD_PRESSURE (detail.id_number) INCLUDE(detail.user_name,detail.follow_date)
創(chuàng)建了一個(gè)名為BLOOD_PRESSURE_INDEX的索引,查詢id_number、user_name、follow_date字段可加快查詢速度,同時(shí)也可根據(jù)這些字段查詢所需的rowkey。如果查詢字段中包含了不在索引的字段且不是rowkey,索引則不會(huì)被觸發(fā)到,查詢?nèi)詴?huì)進(jìn)行全表掃描。
1.4數(shù)據(jù)統(tǒng)計(jì)與分頁查詢
HBase本身不提供分頁查詢功能,但在實(shí)際的應(yīng)用需求中,難免會(huì)用到分頁功能,尤其對(duì)于數(shù)據(jù)量異常龐大的海量數(shù)據(jù)系統(tǒng)。對(duì)于UPDATE STATISTICS BLOOD_PRESSURE,執(zhí)行命令能加快對(duì)BLOOD_PRESSURE表數(shù)據(jù)統(tǒng)計(jì)的查詢速度。關(guān)于Phoenix提供的HBase分頁查詢,可以通過以下查詢方式進(jìn)行:
SELECT *
FROM BLOOD_PRESSURE
WHERE IdNumner = ? AND Name=?
ORDER BY
PK
LIMIT STARTROW OFFSET ENDROW
根據(jù)以上查詢語句,可以根據(jù)姓名、身份證號(hào)查詢最新的從STARTROW到ENDROW之間的數(shù)據(jù)內(nèi)容。
1.5HBase負(fù)載預(yù)測(cè)
雖然Phoenix提供了salted table 功能,可以將寫入的數(shù)據(jù)隨機(jī)分配到不同的RegionServer中,但是隨著集群規(guī)模的變化,也許會(huì)增加集群節(jié)點(diǎn),也許會(huì)有宕機(jī)的節(jié)點(diǎn)。SALT_BUCKETS是固定的,無法修改。采用負(fù)載預(yù)測(cè)算法,預(yù)測(cè)HBase節(jié)點(diǎn)的負(fù)載情況,建立預(yù)測(cè)模型,提前將過大的region進(jìn)行split,然后分配到最佳的RegionServer當(dāng)中,以緩解節(jié)點(diǎn)負(fù)載。endprint
1.5.1負(fù)載均衡定義
令HBase集群系統(tǒng)由m臺(tái)服務(wù)器組成,根據(jù)能力與負(fù)載相匹配原則,設(shè)集群服務(wù)器系統(tǒng)的節(jié)點(diǎn)負(fù)載能力為Capacity-i(i=1,2,3,4,…,m )。如果當(dāng)前的總集群負(fù)載為Lsum,每個(gè)節(jié)點(diǎn)當(dāng)前的負(fù)載量化指標(biāo)為LRS-i(i=1,2,3,4,…,m ),每個(gè)節(jié)點(diǎn)應(yīng)承擔(dān)的負(fù)載量化指標(biāo)為LRSAVG-i(i=1,2,3,4,…,m ),則可以得出如下公式:
Capacity-1:Capacity-2:Capacity-3:…:
Capacity-i=a:b:c:…:i(1)
LRSAVG-i=Lsum*i/(a+b+c+…+i)
(i=1,2,3,4,…,m)(2)
如果LRSAVG-i與LRS-i相當(dāng),則表示當(dāng)前節(jié)點(diǎn)負(fù)載良好,達(dá)到了較佳的讀寫性能;反之,說明當(dāng)前節(jié)點(diǎn)的負(fù)載偏小或偏大,需根據(jù)具體大小進(jìn)行調(diào)整。
1.5.2負(fù)載能力定義
為了能夠更好地對(duì)比計(jì)算機(jī)之間的性能,需要將計(jì)算機(jī)的性能指標(biāo)進(jìn)行量化分析。根據(jù)集群的性能匹配條件,將網(wǎng)絡(luò)流量Lnet、寫請(qǐng)求次數(shù)Lwrite、讀請(qǐng)求次數(shù)Lread、CPU利用率Lcpu、內(nèi)存利用率Lmem作為集群監(jiān)測(cè)的主要指標(biāo)。
圖1為單臺(tái)節(jié)點(diǎn)的HBase,不斷發(fā)送寫數(shù)據(jù)請(qǐng)求,得到的響應(yīng)時(shí)間折線如圖1所示。
圖1展示了在一定的數(shù)據(jù)寫入請(qǐng)求下,HBase提供的響應(yīng)時(shí)間的對(duì)應(yīng)關(guān)系。通過寫入數(shù)據(jù)來測(cè)試HBase性能,實(shí)驗(yàn)發(fā)現(xiàn),隨著數(shù)據(jù)量不斷增大,HBase的響應(yīng)時(shí)間也在不斷延長,折線斜率也在上升,直到某個(gè)位置出現(xiàn)無法響應(yīng)的狀況。本次實(shí)驗(yàn)在數(shù)據(jù)批量寫入70 000條數(shù)據(jù)時(shí),發(fā)現(xiàn)集群無法作出響應(yīng)。定義一次批量最多寫入的數(shù)據(jù)條數(shù)Lwrite-i(i=1,2,3,4,…,m )作為集群的負(fù)載能力量化指標(biāo),同時(shí)得出如下公式:
Capacity-i=Lwrite-i(i=1,2,3,4,…,m )(3)
1.5.3負(fù)載預(yù)測(cè)方法
指數(shù)平滑法是一種常用的預(yù)測(cè)算法,對(duì)本期觀測(cè)值賦予不同權(quán)重來體現(xiàn)下一期的預(yù)測(cè)值。一次指數(shù)平滑法具有嚴(yán)重滯后性,不能很好地預(yù)測(cè)變化趨勢(shì)較明顯的場(chǎng)景。為了避免數(shù)據(jù)的滯后,對(duì)數(shù)據(jù)模型進(jìn)行了改進(jìn),公式如下:
Dt+1=(Yt-Yt-1)+(1-)Dt(t>0)(4)
Ft+1=Yt+(1-)Ft+Dt+1(5)
其中,為平滑系數(shù),取值為0.8。Dt+1為t+1時(shí)刻預(yù)測(cè)模型的差值平滑值,增加Dt+1可以預(yù)防指數(shù)平滑法引起的滯后性。Ft+1為t+1時(shí)刻的負(fù)載預(yù)測(cè)值,Yt為t時(shí)刻的實(shí)際觀測(cè)值,當(dāng)t為0時(shí),選取F0為Y1。將LRS-i作為上述公式中的Yt進(jìn)行t時(shí)刻的負(fù)載預(yù)測(cè),判斷節(jié)點(diǎn)的負(fù)載情況。LRS-i作為節(jié)點(diǎn)的總負(fù)載情況,每個(gè)節(jié)點(diǎn)包含多個(gè)表的多個(gè)region,LRS-i的總負(fù)載可以計(jì)為i節(jié)點(diǎn)中所有region的負(fù)載總和。對(duì)于region是否拆分,進(jìn)行如下分析:統(tǒng)計(jì)當(dāng)前table的所有region個(gè)數(shù)TRCount,如果region的負(fù)載大于當(dāng)前表平均region負(fù)載的兩倍,則將此region進(jìn)行拆分;否則,判斷region的文件大小決定是否拆分。計(jì)LTB-RG-i為某個(gè)表具體region的負(fù)載,LTB-AVGRG為某個(gè)表的平均region負(fù)載。當(dāng)LTB-RG-i大于2倍的LTB-AVGRG時(shí),將此region進(jìn)行拆分。
LTB-RG-i>2*LTB-AVGRG?split:0(6)
Li=LRS-i+12LTB-RG-mLRSAVG-i(i=1,2,3,4,…,m )(7)
Region拆分后的移動(dòng)方案,需要綜合考慮節(jié)點(diǎn)的Capacity-i和LRSAVG-i,將拆分后的region移動(dòng)到Li最小的節(jié)點(diǎn)中。其中Li代表編號(hào)為m的region占用的節(jié)點(diǎn)負(fù)載容量比值。
1.5.4算法流程
算法詳細(xì)描述如下:①建立定時(shí)任務(wù),定期執(zhí)行此算法;②構(gòu)建監(jiān)控系統(tǒng),實(shí)時(shí)監(jiān)控系統(tǒng)當(dāng)前的負(fù)載情況、網(wǎng)絡(luò)流量、讀寫次數(shù)、CPU利用率、內(nèi)存利用率。一方面可以實(shí)時(shí)發(fā)出報(bào)警提醒,另一方面可對(duì)將來的集群負(fù)載狀態(tài)預(yù)測(cè)提供有利的數(shù)據(jù)支撐;③預(yù)測(cè)數(shù)據(jù)模型,利用HBase的監(jiān)控性能指標(biāo),對(duì)HBase的regionserver、region負(fù)載進(jìn)行預(yù)測(cè),并制定region的拆分與遷移策略,可以參照公式(5)、(6);④獲取當(dāng)前region的負(fù)載情況,建立隊(duì)列,將region的負(fù)載從大到小進(jìn)行排列,計(jì)算所有region均衡負(fù)載的量化指標(biāo),比較LTB-RG-i和LTB-AVGRG之間的大小關(guān)系;如果region的預(yù)測(cè)負(fù)載大于region平均負(fù)載的兩倍,則將其進(jìn)行拆分,拆分后的每個(gè)子region分別承擔(dān)一半父region的負(fù)載。然后,重新排列隊(duì)列,直到集群中所有的region都滿足為止;⑤如果當(dāng)前的region負(fù)載實(shí)現(xiàn)了平衡,則判斷region文件大小,對(duì)于過大的文件同樣采用步驟④的拆分移動(dòng)策略。算法流程如圖2所示。
Hadoop和HBase都是基于Linux的操作系統(tǒng),JVM是運(yùn)行環(huán)境下的系統(tǒng)軟件,本實(shí)驗(yàn)環(huán)境是在ubuntu操作系統(tǒng)下進(jìn)行的。上述7個(gè)主機(jī)是由一臺(tái)大型機(jī)劃分出的虛擬機(jī)得到。
數(shù)據(jù)的寫入方式通常利用HBase的Java API進(jìn)行數(shù)據(jù)操作,采用批量提交數(shù)據(jù)的方式寫入。優(yōu)化后的系統(tǒng)采用Phoenix的Jdbc接口進(jìn)行數(shù)據(jù)寫入操作,同樣采用批量提交的方式。圖3為通過原始的未改進(jìn)的HBase集群進(jìn)行的寫入數(shù)據(jù)測(cè)試和改進(jìn)方案后的HBase集群寫入數(shù)據(jù)測(cè)試對(duì)比結(jié)果。
通過圖3的對(duì)比結(jié)果,改進(jìn)后的健康大數(shù)據(jù)平臺(tái)在性能上得到了提升,在管理和使用方面也更加便捷。其中,數(shù)據(jù)的寫入響應(yīng)時(shí)間并不是呈直線上升,而是有波動(dòng)現(xiàn)象,這與HBase的數(shù)據(jù)寫入原理相關(guān)。HBase采用LSM的結(jié)構(gòu)進(jìn)行數(shù)據(jù)讀寫,HBase數(shù)據(jù)寫入性能同時(shí)還會(huì)受到WAL、FLUSH等機(jī)制影響。但總體而言,相比于原有的HBase方案,仍得到了一定提升。endprint
上述響應(yīng)時(shí)間測(cè)試采用隨機(jī)查詢的方式,在一定規(guī)模的數(shù)據(jù)中,測(cè)試系統(tǒng)的隨機(jī)查詢響應(yīng)時(shí)間。通過圖4的對(duì)比結(jié)果可知,改進(jìn)后的健康大數(shù)據(jù)平臺(tái)在查詢性能上也得到了提升。通過對(duì)比發(fā)現(xiàn),HBase在一定數(shù)據(jù)范圍內(nèi),隨著數(shù)據(jù)量增長,數(shù)據(jù)查詢的響應(yīng)時(shí)間并不會(huì)隨之增加,這是HBase的查詢結(jié)構(gòu)LSM的一個(gè)特性。此外,也可以借助HBase的MemStore和緩存等方法加快查詢速度。
3總結(jié)與展望
健康監(jiān)測(cè)大數(shù)據(jù)平臺(tái)的關(guān)鍵技術(shù)研究對(duì)于建設(shè)高性能的健康平臺(tái)具有重要意義。以健康大數(shù)據(jù)為業(yè)務(wù)背景,從健康數(shù)據(jù)格式統(tǒng)一的角度出發(fā),通過研究《城鄉(xiāng)居民健康檔案基本數(shù)據(jù)集》,對(duì)居民健康檔案數(shù)據(jù)集提出了統(tǒng)一的存儲(chǔ)模型和方案。研究了大數(shù)據(jù)存儲(chǔ)和查詢的相關(guān)技術(shù),提出利用Hash和預(yù)分區(qū)方法優(yōu)化HBase的表結(jié)構(gòu),利用Phoenix建立的二級(jí)索引優(yōu)化HBase的復(fù)雜查詢速度,并利用Phoenix實(shí)現(xiàn)的HBase協(xié)處理器優(yōu)化HBase對(duì)聚合操作的執(zhí)行效率。本文提出的一系列改進(jìn)方案有效提高了健康大數(shù)據(jù)平臺(tái)性能,同時(shí)簡(jiǎn)化了HBase管理操作,對(duì)利用HBase構(gòu)建可進(jìn)行實(shí)時(shí)查詢、處理復(fù)雜查詢的應(yīng)用提供了有價(jià)值的參考。
然而,本文沒有對(duì)健康數(shù)據(jù)的相關(guān)內(nèi)容進(jìn)行深入分析,對(duì)于健康檔案的數(shù)據(jù)模型建立,在實(shí)際應(yīng)用過程中可能存在偏差。利用Phoenix創(chuàng)建的表只能通過Phoenix寫入才能進(jìn)行查詢顯示,直接用HBase進(jìn)行操作反而無法
被查詢到,這對(duì)數(shù)據(jù)的寫入方式造成了限制。另外HBase仍然存在著諸多問題,由于底層過度依賴于Hadoop的HDFS,使其性能瓶頸也受到影響。此外,HBase的查詢和存儲(chǔ)性能的提升需要進(jìn)一步改進(jìn)自身結(jié)構(gòu),隨著硬件系統(tǒng)的不斷發(fā)展,HBase可以更多地借助于內(nèi)存進(jìn)行存儲(chǔ)和查詢。
參考文獻(xiàn):
[1]余峰.MYHBASE:一種基于HBASE的NEWSQL數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2012.
[2]景晗,鄭建生,陳鯉文,等.基于MapReduce 和HBase 的海量網(wǎng)絡(luò)數(shù)據(jù)處理[J].科學(xué)技術(shù)與工程,2015,15(34):183191.
[3]董新華,李瑞軒,周灣灣,等.Hadoop系統(tǒng)性能優(yōu)化與功能增強(qiáng)綜述[J].計(jì)算機(jī)研究與發(fā)展,2013,50(S2):115.
[4]卓海藝.基于HBase的海量數(shù)據(jù)實(shí)時(shí)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013.
[5]丁飛,陳長松,張濤,等.基于協(xié)處理器的HBase區(qū)域級(jí)第二索引研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2014,34(A01):181185.
[6]連加典,劉宏立,謝海波,等.基于預(yù)測(cè)機(jī)制的分級(jí)負(fù)載均衡算法[J].計(jì)算機(jī)工程與應(yīng)用,2015,51(11):6773.
[7]鄭坤,付艷麗.基于HBase 和GeoTools 的矢量空間數(shù)據(jù)存儲(chǔ)模型研究[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(3):2325.
[8]WHITE T. Hadoop: the definitive guide[M].O′reilly Media Inc GravensteinHighway North,2010,215(11):14.
[9]HAYT, TANSLEYS, TOLLEK. The fourth paradigm:dataintensive science discovery[M]. Redmond,Washington, USA: Microsoft Research, 2009.
[10]RAMAMRITHAM K. Realtime databases[J]. International Journal of Distributed and Paralled Databases(S09268782),1993(2):199226.
[11]CHANG F, DEAN J, GHEMAWAT S, et al. Bigtable: adistributed storage system for structured data[J].ACM Transactions on Computer Systems (TOCS)(S07342071), 2006,26(2):205218.
[12]陶永才,石磊.異構(gòu)資源環(huán)境下的MapReduce性能優(yōu)化[J].小型微型計(jì)算機(jī)系統(tǒng),2013,34(2):287292.
[13]傅杰,都志輝.一種周期性MapReduce作業(yè)的負(fù)載均衡策略[J].計(jì)算機(jī)科學(xué),2013,40(3):3840.
[14]張春明,芮建武,何婷婷.一種Hadoop小文件存儲(chǔ)和讀取的方法[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(11):95100.
責(zé)任編輯(責(zé)任編輯:黃?。〆ndprint