丁薇+譚向宇+彭晶+黃緒勇+聶鼎+程旭明+胡勇
隨著科學(xué)技術(shù)的不斷提高,人們不只是依靠傳統(tǒng)的氣象監(jiān)測方式,而是不斷的進行科技革新,監(jiān)測的方式越加豐富起來。而問題也隨之而來,氣象數(shù)據(jù)涉及的方面廣闊,數(shù)據(jù)多維化,結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)成上升趨勢,使得氣象數(shù)據(jù)的存儲面臨難題。
將數(shù)據(jù)庫技術(shù)應(yīng)用于包含海量數(shù)據(jù)的氣象數(shù)據(jù)上,雖然可以大大提高數(shù)據(jù)檢索能力和服務(wù)效率,但是對于海量數(shù)據(jù)分析是遠遠不夠的,其涉及到的數(shù)據(jù)是多維化的,想要從這些看似簡單,實際卻很復(fù)雜的數(shù)據(jù)中分析有用數(shù)據(jù)是很困難的。
而數(shù)據(jù)倉庫的出現(xiàn)可以很好的解決氣象數(shù)據(jù)的數(shù)據(jù)量巨大,且數(shù)據(jù)多維化的問題。
1 氣象數(shù)據(jù)倉庫
1.1 體系結(jié)構(gòu)
本文的數(shù)據(jù)倉庫的建立是基于Hadoop+Jstorm+zookeeper三者的結(jié)合構(gòu)建的分布式計算環(huán)境上的,最終數(shù)據(jù)存放于Hbase中,使用Map Reduce對電力大數(shù)據(jù)進行分布式計算和處理。高效快速的對實時數(shù)據(jù)處理反饋,海量數(shù)據(jù)存儲。
同時將各個監(jiān)測設(shè)備終端和監(jiān)測屬性點存放于Oracle數(shù)據(jù)庫中。各個設(shè)備終端之間的關(guān)系如下:一臺設(shè)備上可以掛載多個監(jiān)測終端于其上,一個監(jiān)測終端又按監(jiān)測的種類不同分為多個監(jiān)測主題實例,每個主題實例對應(yīng)這一個監(jiān)測類型(縣級站點氣象實時數(shù)據(jù)、鄉(xiāng)鎮(zhèn)站點氣象實時數(shù)據(jù)等),每一種監(jiān)測類型下有對應(yīng)這多個監(jiān)測屬性(雨量、實時溫度、濕度等)。
將采集到的實時數(shù)據(jù)存放于Hbase,非實時數(shù)據(jù)存放于Oracle,兩者即互不相干,有密不可分。Hbase數(shù)據(jù)的寫入,依賴于實時數(shù)據(jù)和非實時數(shù)據(jù)。
1.2 數(shù)據(jù)來源
本次研究的數(shù)據(jù)倉庫技術(shù)的數(shù)據(jù)來源是從地方局中調(diào)取的數(shù)據(jù),其以文件格式存儲于遠程ftp服務(wù)器上。故數(shù)據(jù)要想進入到Hbase中,需要程序解析后塞入消息隊列中,然后在存至Hbase。
為了預(yù)測的準確和詳細,需要進行多個天氣指標值:溫度(℃)、雨量(mm)、風(fēng)速(m/s)、風(fēng)向、氣壓等,還要根據(jù)氣象衛(wèi)星傳遞回來的數(shù)據(jù)進行分析整合。
在數(shù)據(jù)存放Hbase前,設(shè)計合理的rowkey可以大大的提高數(shù)據(jù)的檢索能力,提高Hadoop集群的性能。
本此研究同樣設(shè)計了一套簡單而有效的rowkey策略:以主題實例+監(jiān)測屬性+采集時間三者拼接組合成rowkey。這樣設(shè)計的原因是:1)主題實例是唯一存在的,一個主題只對應(yīng)著一個終端,而一個終端也只對應(yīng)著一個設(shè)備,以主題實例為首,就能確定屬性的唯一;2)主題與類型是多對一的關(guān)系,一個主題對應(yīng)著一個類型;而類型與屬性是是一對多的關(guān)系,這樣設(shè)計就能知道,是哪個主題下那個屬性的監(jiān)測信息了;3)采集時間,因為數(shù)據(jù)采集是分時間段的,每隔一段時間就要進行數(shù)據(jù)的采集,為確保數(shù)據(jù)的實時性,所以添加了采集時間。這樣就確保了監(jiān)測終端在某個時間點采集到了某個監(jiān)測屬性的值。
圖2即是rowkey的最終效果展示:由圖可以知道:主題實例10000000000001790977在2016年11月4日6時30分的時候的10076屬性(天氣情況)為小雨,而在8時53分為陣雨。通過主題實例亦可以反向拿到監(jiān)測終端為:“10*10氣象網(wǎng)格19176”。
數(shù)據(jù)從不同的監(jiān)測系統(tǒng)中到來,經(jīng)過解析后,按照固定的格式存儲,既保證了數(shù)據(jù)的規(guī)范化處理,又能達到數(shù)據(jù)因果查詢效果。拿到一個設(shè)備可以通過設(shè)備與監(jiān)測終端的關(guān)系獲取到終端信息,再以終端和主題實例的關(guān)系獲取到主題實例信息,然后再以主題實例與實例類別,就能抽取到主題的監(jiān)測屬性信息,最后就可以根據(jù)這些信息,去查詢指定時間采集到的數(shù)據(jù)值了:get ‘THEME_PARAM_VAUE,100000000000016833731009920160706000000?;蛘卟樵円惶熘畠?nèi)采集到的所有數(shù)據(jù)值:scan ‘THEME_PARAM_VALUE,{STARTROW=>1000000000016833731009920160706074800,STOPROW=>000000000016833731009920160707000000}。
2 流數(shù)據(jù)的處理
氣象數(shù)據(jù)也是一種流式數(shù)據(jù),監(jiān)測設(shè)備按照一定的頻率,長期的采集監(jiān)測點的數(shù)據(jù),通過網(wǎng)絡(luò)實時的提交給服務(wù)器。所以可以把它看作一種流數(shù)據(jù)。
針對于流數(shù)據(jù),我們在建設(shè)分布式計算環(huán)境的時候就已經(jīng)接入Jstorm流式計算框架。它能夠簡單可靠的處理實時的數(shù)據(jù)流,采用批處理方式實時處理,在極端時間內(nèi)得到結(jié)果反饋。
外部流式數(shù)據(jù)流入Spout中,然后將數(shù)據(jù)以tuple作為基本單元傳遞給Bolt處理單元,然后再將經(jīng)過處理后的數(shù)據(jù)到下一個處理單元對數(shù)據(jù)加工處理,直到最后一個處理單元處理完成,才能算完成一次Topology,在這個處理和傳遞數(shù)據(jù)的過程中,走的都是批處理方式,高效快速的對流數(shù)據(jù)進行計算處理,達到實時的反饋[1]。
氣象數(shù)據(jù)的后期利用也是很大的,雖然上一刻的天氣已經(jīng)處于過去時了,但是其依然還有利用價值,比如:氣象預(yù)測的時候,你得有一個事物作為參照,才能根據(jù)公式、程序得出想要的結(jié)果。
所以對于氣象數(shù)據(jù)的存儲,不管是過去,還是現(xiàn)在的數(shù)據(jù)都非常重要,不能輕易的做刪除操作,而在Hbase中如果數(shù)據(jù)列有問題,可以通過rowkey更新覆蓋,這有一個好處:Hbase會自動記錄版本號,舊的版本不是物理上的刪除,而是不直接顯示,每次只顯示最新版本的數(shù)據(jù)。
3 結(jié)論
以上就是對氣象數(shù)據(jù)倉庫在數(shù)據(jù)存儲方面的研究,建立合理的rowkey策略,保證數(shù)據(jù)的唯一性、可使用性,以簡單的方式存儲具有重要價值的數(shù)據(jù)。使用Jstorm對氣象數(shù)據(jù)進行處理和存儲,極大的提高了數(shù)據(jù)處理能力,無限的接近于實時反饋。
參考文獻
[1]楊鵬.面向流式數(shù)據(jù)處理平臺JStorm的負載均衡技術(shù)研究[J].北京:北京工業(yè)大學(xué),2016.endprint