国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種電力量測類數(shù)據(jù)遷移到HBase的方法

2018-07-16 12:04蘇鵬濤
電子技術(shù)與軟件工程 2018年10期
關(guān)鍵詞:日志數(shù)據(jù)庫模塊

文/蘇鵬濤

1 引言

隨著電力信息化的建設(shè)推進,電力企業(yè)數(shù)據(jù)中心積累了大量的數(shù)據(jù)資源,數(shù)據(jù)準確性越來越高,量測類數(shù)據(jù)其所占比重也越來越大,已具備良好的數(shù)據(jù)基礎(chǔ)。通過各種基于大數(shù)據(jù)平臺的數(shù)據(jù)挖掘工具或查詢引擎,可以實現(xiàn)快速查詢、負荷預(yù)測、異常分析等高級應(yīng)用,提高企業(yè)運營水平、發(fā)掘數(shù)據(jù)潛在價值。由于生產(chǎn)系統(tǒng)大都為傳統(tǒng)關(guān)系型數(shù)據(jù)庫,這就需要將海量的量測數(shù)據(jù)從傳統(tǒng)關(guān)系型數(shù)據(jù)庫遷移到大數(shù)據(jù)平臺,雖然Sqoop等工具支持將關(guān)系型數(shù)據(jù)庫導(dǎo)入HBase中,但其需要與其它調(diào)度工具如Oozie配合使用才可實現(xiàn)定時任務(wù),并且沒有自動補傳功能。本方法基于HBaseJava API 實現(xiàn)了一種支持自動補傳的傳統(tǒng)關(guān)系型數(shù)據(jù)庫遷移到HBase的方法。

該方法通過JDBC訪問數(shù)據(jù)源,通過HBaseJava API操作HBase數(shù)據(jù)庫寫入數(shù)據(jù),可以實現(xiàn)電力量測類數(shù)據(jù)從傳統(tǒng)關(guān)系型數(shù)據(jù)庫向大數(shù)據(jù)平臺HBase數(shù)據(jù)庫的自動遷移,支持增量延時同步功能,能夠做到遷移失敗數(shù)據(jù)的自動補傳,具有穩(wěn)定內(nèi)存消耗、降低集群資源需求、靈活控制遷移方式、快速增加遷移任務(wù)、缺失數(shù)據(jù)自動補傳、異常提醒和任務(wù)定時啟動等優(yōu)點。

2 一種電力量測類數(shù)據(jù)遷移到HBase的方法

2.1 HBase表結(jié)構(gòu)

HBase是建立在Hadoop文件系統(tǒng)上的分布式列式數(shù)據(jù)庫,它是一種NoSQL數(shù)據(jù)庫,主要適用于海量明細數(shù)據(jù)(十億、百億級)的隨機實時查詢,如日志明細、交易清單、軌跡行為等,非常適合于電力量測類海量數(shù)據(jù)的快速查詢、綜合分析等應(yīng)用。

電力量測類數(shù)據(jù)是一種具有明顯時序特性的數(shù)據(jù),主要由采集日期、采集點(從0點整開始,根據(jù)采集設(shè)備不同,每隔2、5或15分鐘一個)、設(shè)備號、量測類型、采集值(量測值)構(gòu)成,其中設(shè)備號可關(guān)聯(lián)到設(shè)備信息。量測快速查詢主要有兩種類型的需求,一是查詢某一設(shè)備一段時間的曲線(如查詢XX變壓器連續(xù)一個月的負荷典線,了解哪些時段負荷高等),二是查詢某一時間各設(shè)備的數(shù)值(如查詢XX區(qū)所有變壓器負荷,哪些設(shè)備超載等)。為滿足這兩種快速查詢需求,設(shè)計HBase表結(jié)構(gòu)如圖1所示,以公司簡碼、時間、主設(shè)備號、量測類型合并作為Rowkey,以設(shè)備號作為列名,示數(shù)值作為值,公司簡碼作為分區(qū)。

圖1:HBase表結(jié)構(gòu)

圖2:量測類數(shù)據(jù)寬表

圖3:功能結(jié)構(gòu)圖

2.2 遷移方法功能模塊

Sqoop是一款開源的工具,主要用于在Hadoop與傳統(tǒng)的數(shù)據(jù)庫間進行數(shù)據(jù)的相互遷移。它以Shell命令的方式進行調(diào)用,可以將命令中的查詢語句的結(jié)果導(dǎo)入到HBase中。

量測類數(shù)據(jù)多表關(guān)聯(lián)后的數(shù)據(jù)寬表如圖2所示。每個設(shè)備每天一條數(shù)據(jù),96個列記錄96個測點值,與圖1HBase表結(jié)構(gòu)相比有兩個結(jié)構(gòu)上的差異。一是需要將一行數(shù)據(jù)中的n個時間點轉(zhuǎn)換為n行;二是需要將每個主設(shè)備號下的n行的每個設(shè)備號轉(zhuǎn)換為一行的n個列,并且以設(shè)備號作為列名。這就同時涉及到行轉(zhuǎn)列和列轉(zhuǎn)行,由于Sqoop依賴于SQL語句查詢結(jié)果,要通過一個SQL語句實現(xiàn)此結(jié)構(gòu)轉(zhuǎn)換非常困難,語句極其復(fù)雜。本遷移方法使用Java語言開發(fā),通過SQL查詢出寬表數(shù)據(jù),再對每一條寬表數(shù)據(jù)按照配置的規(guī)則拆分組裝,這樣兩個循環(huán)結(jié)構(gòu)即可實現(xiàn)此結(jié)構(gòu)轉(zhuǎn)換。其功能結(jié)構(gòu)如圖3所示。

本方法能根據(jù)主機硬件信息、HBase集群信息設(shè)定最佳的寫入方式,由查詢模塊、配置模塊、日志模塊、轉(zhuǎn)換模塊、寫入模塊、管理模塊六個功能模塊組成。

查詢模塊通過JDBC從關(guān)系型數(shù)據(jù)庫查詢數(shù)據(jù);

配置模塊用于配置連接、表、查詢條件、結(jié)果輸出格式、寫入方式等;

日志模塊記錄每張表每次遷移的狀態(tài);

轉(zhuǎn)換模塊按照對應(yīng)HBase結(jié)構(gòu)將查詢模塊查到的結(jié)果數(shù)據(jù)轉(zhuǎn)換為寫入模塊需要的格式;

寫入模塊按照配置模塊寫入?yún)?shù)通過API將數(shù)據(jù)寫入HBase中;

管理模塊定時啟動遷移任務(wù)并根據(jù)日志模塊記錄的日志信息補傳未成功遷移的數(shù)據(jù)。

所有模塊均由Java語言開發(fā),數(shù)據(jù)存儲于MySQL數(shù)據(jù)庫,使用JDBC方式分批訪問量測數(shù)據(jù),使用JavaHBase API訪問HBase。

2.3 遷移流程

遷移流程如圖4所示。

開始:每日由管理模塊定時啟動遷移任務(wù)。

步驟1:管理模塊檢索日志模塊記錄的遷移日志,判斷歷史遷移日期中是否存在異常狀態(tài)記錄或有日志缺失。若有執(zhí)行步驟2,若無執(zhí)行步驟3。

步驟2:管理模塊生成缺失、異常日志信息列表。執(zhí)行步驟4。

步驟3:查詢模塊讀取配置模塊參數(shù),按參數(shù)分批查詢需遷移的數(shù)據(jù)表前一日數(shù)據(jù)。執(zhí)行步驟5。

步驟4:查詢模塊讀取配置模塊參數(shù),按參數(shù)分批查詢需遷移的數(shù)據(jù)表對應(yīng)的生成缺失、異常日志信息列表中的最早日期數(shù)據(jù),并從列表中刪除此條記錄。執(zhí)行步驟5。

步驟5:轉(zhuǎn)換模塊按配置模塊參數(shù)將步驟3或步驟4查詢結(jié)果轉(zhuǎn)換為HBase需要的結(jié)構(gòu)。執(zhí)行步驟6。

步驟6:寫入模塊通過API,按照配置模塊參數(shù)多線程并行寫入HBase。執(zhí)行步驟7。

步驟7:日志模塊記錄或更新日志。執(zhí)行步驟8。

步驟8:管理模塊判斷日志記錄中是否已有前一日日志,若有執(zhí)行步驟11,若無執(zhí)行步驟9。

步驟9:查詢模塊檢查生成缺失、異常日志信息列表,若已無信息執(zhí)行步驟10,若有信息執(zhí)行步驟4。

步驟10:查詢模塊讀取配置模塊參數(shù)按參數(shù)分批查詢需遷移的數(shù)據(jù)表前一日數(shù)據(jù)。執(zhí)行步驟5。

步驟11:管理模塊結(jié)束當次遷移任務(wù),并檢查日志記錄中是否存在異常次數(shù)大于等于2的日志記錄。若有發(fā)出警告日志,提醒人工檢查。

整個遷移過程中,若日志模塊、管理模塊發(fā)生異常,會造成日志缺失;其它模塊發(fā)生異常會記錄異常日志到日志模塊中。后一日遷移任務(wù)均可根據(jù)日志記錄自動補傳。當發(fā)生補傳無效情況時,管理模塊生成告警日志,提醒人工干預(yù)檢測處理,以此機制確保遷移的自動化和可靠性。

2.4 遷移效果

測試環(huán)境為CDH大數(shù)據(jù)平臺,其HBase集群由7臺配置相同的服務(wù)器構(gòu)成,每臺服務(wù)器均安裝了一個獨立的Sqoop組件。由于量測數(shù)據(jù)量較大,Sqoop使用的轉(zhuǎn)換SQL較復(fù)雜,采用一個Sqoop命令遷移全部數(shù)據(jù)時較容易發(fā)生卡死,因此將其拆分為多個命令。7臺服務(wù)器,每臺啟動一個Sqoop遷移,每個Sqoop特意改造為遷移不同HBase分區(qū)的數(shù)據(jù),以確保數(shù)據(jù)均衡,達到最大效率。Sqoop偽代碼如下:

其中--query "......"部分需要將整個邏輯寫為一個可執(zhí)行的SQL語句。

遷移方法配置為分批查詢,每批次查詢固定量的數(shù)據(jù),在內(nèi)存中轉(zhuǎn)換寫入后再抽取下一批數(shù)據(jù),以確保使用較低的內(nèi)存達到較高的效率。管理模塊根據(jù)HBase集群數(shù),每臺HBase主機單獨啟動一個遷移進程,每個進程遷移不同分區(qū)數(shù)據(jù),確保所有HBase節(jié)點均合理利用起來。

通過測試,轉(zhuǎn)換寫入1億行原始數(shù)據(jù),寫入HBase后數(shù)據(jù)大小約900G。若用Sqoop用時4小時38分,平均速率約每秒56M,單個進程每秒8M。使用本遷移方法用時5小時01分,平均速率約每秒51M,單個進程每秒7.3M。服務(wù)器資源消耗兩者相當,遷移方法由于有日志等其它開銷,效率稍低于Sqoop。

雖然數(shù)據(jù)遷移效率略低于Sqoop,但若需補傳少量數(shù)據(jù)時,Sqoop會將全部數(shù)據(jù)重傳,所有已傳數(shù)據(jù)變?yōu)闅v史版本,極大增加了系統(tǒng)存儲負擔。若Sqoop要達到本方法的補傳效果,需要人為查詢HBase中表數(shù)據(jù)情況,再更改Sqoop中的SQL語句,當HBase表中數(shù)據(jù)量極大時,很難查到失敗數(shù)據(jù)的斷面信息,操作可行性極低。

本方法在數(shù)據(jù)遷移過程中,通過直接Kill進程方式強制結(jié)束數(shù)據(jù)遷移。遷移方法進程在被Kill之前已完成遷移的數(shù)據(jù)其日期已被記錄于日志中,Kill后進程停止,其后日志缺失。重啟遷移任務(wù),管理模塊根據(jù)日志自動將缺失日志的日期的數(shù)據(jù)補傳,僅補傳Kill執(zhí)行后的缺失數(shù)據(jù),覆蓋前次數(shù)據(jù)使其成為歷史版本。

3 結(jié)論

圖4:遷移流程圖

本文研究了一種電力量測類數(shù)據(jù)遷移到HBase的方法,包含查詢模塊、配置模塊、日志模塊、轉(zhuǎn)換模塊、寫入模塊、管理模塊等六個功能模塊,通過配置查詢語句、轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)和設(shè)定系統(tǒng)參數(shù),基于JDBC訪問電力量測類數(shù)據(jù)傳統(tǒng)關(guān)系型數(shù)據(jù)庫、HBase Java API操作HBase數(shù)據(jù)庫,實現(xiàn)寫入遷移數(shù)據(jù)、記錄遷移日志、定時啟動任務(wù)和自動補傳數(shù)據(jù)功能。本方法可以實現(xiàn)電力量測類數(shù)據(jù)從傳統(tǒng)關(guān)系型數(shù)據(jù)庫到HBase數(shù)據(jù)庫的自動遷移,支持增量延時同步功能,能夠做到遷移失敗數(shù)據(jù)的自動補傳,能夠以較高效率將電力量測類數(shù)據(jù)導(dǎo)入HBase,并解決了缺失數(shù)據(jù)自動補傳的問題,降低了電力量測類數(shù)據(jù)遷移到HBase的執(zhí)行難度,提高了數(shù)據(jù)遷移的靈活性、便利性和穩(wěn)定性。

猜你喜歡
日志數(shù)據(jù)庫模塊
28通道收發(fā)處理模塊設(shè)計
“選修3—3”模塊的復(fù)習備考
一名老黨員的工作日志
扶貧日志
游學(xué)日志
一種基于粗集和SVM的Web日志挖掘模型
集成水空中冷器的進氣模塊