張恩紅,尹海燕,李高潔
(廣東省氣象探測數(shù)據(jù)中心,廣東 廣州 510641)
隨著科技的進(jìn)步和社會需求的發(fā)展,人們對氣象的需求越來越豐富。為了應(yīng)對眾多需求,氣象行業(yè)的現(xiàn)代化被提到很高的程度,從中央到地方都有很大的投入,無論是氣象觀測、數(shù)值預(yù)報、天氣預(yù)報等都有很大的發(fā)展。從天上的衛(wèi)星、空中的各種探空設(shè)備,地上的雷達(dá)、自動站等三維立體全方位的氣象數(shù)據(jù)采集,獲取了大量的觀測數(shù)據(jù);從國外到國內(nèi),眾多的數(shù)值預(yù)報模式,提供了大量的數(shù)值模式產(chǎn)品數(shù)據(jù);為了滿足不同類型的用戶需求,提供了各種各樣的天氣預(yù)報產(chǎn)品。每天產(chǎn)生了海量(省級氣象局每天約1 T數(shù)據(jù)量,120萬以上的數(shù)據(jù)文件)的氣象數(shù)據(jù),這對數(shù)據(jù)管理與應(yīng)用都提出強(qiáng)大的挑戰(zhàn)。
關(guān)于海量數(shù)據(jù)管理的技術(shù)有很多,其中Elasticsearch技術(shù)在眾多的海量數(shù)據(jù)管理與搜索應(yīng)用中應(yīng)用廣泛。姜康等[1]基于Elasticsearch建立了水利行業(yè)的海量數(shù)據(jù)的搜索與共享服務(wù)平臺;鄭義成等[2]基于Elasticsearch技術(shù)對航海中產(chǎn)生的海量船舶自動識別系統(tǒng)數(shù)據(jù)的存儲方法進(jìn)行了深入研究;陳亞杰等[3]基于Elasticsearch分布式搜索引擎進(jìn)行了天文大數(shù)據(jù)檢索中的應(yīng)用研究。眾多研究人員[4-5]在該技術(shù)都進(jìn)行了研究及應(yīng)用,可見Elasticsearch技術(shù)在海量數(shù)據(jù)的管理與搜索方面具有一定的可靠性。文中基于Elasticsearch技術(shù),采用元數(shù)據(jù)技術(shù)和集群管理方法對海量氣象數(shù)據(jù)的搜索與服務(wù)平臺建設(shè)進(jìn)行研究。
海量數(shù)據(jù)搜索是大數(shù)據(jù)時代的一大難題。面對海量數(shù)據(jù),如何建立一個高效、準(zhǔn)確地獲取所需數(shù)據(jù)的平臺是當(dāng)前IT行業(yè)研究的熱門話題。搜索技術(shù)也是百花齊放,搜索機(jī)制也各不相同[6-7]。Elasticsearch(縮寫為ES)是當(dāng)前的熱門技術(shù),文中主要討論該技術(shù)的使用機(jī)制。索引構(gòu)建機(jī)制的邏輯圖如圖1所示。
圖1 ES的索引構(gòu)建機(jī)制邏輯
ES集群是一個或多個節(jié)點的集合,它們共同存儲了整個數(shù)據(jù)集,并提供了聯(lián)合索引以及可跨所有節(jié)點的搜索能力。多節(jié)點組成的集群擁有冗余能力,可以在一個或幾個節(jié)點出現(xiàn)故障時保證服務(wù)的整體可用性。集群靠其獨有的名稱進(jìn)行標(biāo)識,默認(rèn)名稱為“Elasticsearch”。節(jié)點靠其集群名稱來決定加入哪個ES集群,一個節(jié)點只能屬于一個集群。如果不考慮冗余能力等特性,僅有一個節(jié)點的ES集群一樣可以實現(xiàn)所有的存儲及搜索功能。
運行了單個實例的ES主機(jī)稱為節(jié)點,它是集群的一個成員,可以存儲數(shù)據(jù)、參與集群索引及搜索操作。類似于集群,節(jié)點靠其名稱進(jìn)行標(biāo)識,默認(rèn)為啟動時自動生成的隨機(jī)Marvel字符名稱。用戶可以按需要自定義任何希望使用的名稱,但出于管理的目的,該名稱應(yīng)該盡可能有較好的識別性。節(jié)點通過為其配置的ES集群名稱確定其所要加入的集群。
ES的“分片(shard)”機(jī)制可將一個索引內(nèi)部的數(shù)據(jù)分布存儲于多個節(jié)點,通過將一個索引切分為多個底層物理的Lucene索引完成索引數(shù)據(jù)的分割存儲功能,每一個物理的Lucene索引稱為一個分片(shard)。每個分片其內(nèi)部都是一個全功能且獨立的索引,因此可由集群中的任何主機(jī)存儲。
查詢執(zhí)行過程通常要分成兩個階段,即分散階段及合并階段。分散階段是向所查詢的索引中的所有shard發(fā)起執(zhí)行查詢的過程,合并階段是將各shard返回的結(jié)果合并、排序并響應(yīng)給客戶端的過程。為了完成此類full-text域的搜索,ES必須首先分析文本并將其構(gòu)建成倒排索引(inverted index)。倒排索引由各文檔中出現(xiàn)的單詞列表組成,列表中的各單詞不能重復(fù)且需要指向其所在的各文檔。因此,為了創(chuàng)建倒排索引,需要先將各文檔中域的值切分為獨立的單詞(也稱為term或token),而后將其創(chuàng)建為一個無重復(fù)的有序單詞列表。這個過程稱之為“分詞(tokenization)”。
針對海量數(shù)據(jù)存儲與服務(wù),各行業(yè)的專家都有自己的方法與技術(shù)[8-10],氣象行業(yè)也不例外。氣象數(shù)據(jù)種類繁多,存儲結(jié)構(gòu)復(fù)雜,很難采用傳統(tǒng)結(jié)構(gòu)化的數(shù)據(jù)庫模式存儲數(shù)據(jù),因此,不能直接對數(shù)據(jù)進(jìn)行格式化管理。借鑒其他行業(yè)的經(jīng)驗[11-13],文中采用元數(shù)據(jù)技術(shù)對氣象數(shù)據(jù)進(jìn)行管理,即基于ES的NoSQL的數(shù)據(jù)存儲方式。采用web數(shù)據(jù)訪問方式為用戶提供服務(wù)得到較多行業(yè)的支持[14-16],故文中采用web網(wǎng)頁提供給用戶使用。
元數(shù)據(jù)(metadata),又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。為了便于管理,采用了統(tǒng)一的元數(shù)據(jù)模板,針對不同類型的數(shù)據(jù),通過不同的關(guān)鍵字進(jìn)行區(qū)別。元數(shù)據(jù)模板是一個開放式管理機(jī)制,可以根據(jù)業(yè)務(wù)的擴(kuò)展,動態(tài)增加元數(shù)據(jù)類型。文中將氣象數(shù)據(jù)按大類和小類進(jìn)行分類,每個子類設(shè)計為一個元數(shù)據(jù),將現(xiàn)有的數(shù)據(jù)分為13大類,260多個元數(shù)據(jù)類型,基本可以覆蓋所有的氣象數(shù)據(jù)。
元數(shù)據(jù)管理如圖2所示。
圖2 元數(shù)據(jù)管理
ES構(gòu)建數(shù)據(jù)索引時有個分詞的過程,默認(rèn)情況每個獨立的字就是一個分詞。為了提高搜索的命中率和效率,構(gòu)建氣象行業(yè)自有的分詞庫可以有效地解決這個問題。當(dāng)前,增加了這些與系統(tǒng)相關(guān)的分詞,AGME(農(nóng)業(yè)氣象)、OTHE(其他觀測)、SURF(地面觀測)、CAWN(大氣成分)、HPXY(歷史科考)、OCEN(海洋)、NAFP(數(shù)值預(yù)報)、DISA(氣象災(zāi)害)、RADA(天氣雷達(dá))、RADI(大氣輻射)、SATE(氣象衛(wèi)星)、SEVP(精細(xì)化預(yù)報)、UPAR(高空探測),這個詞庫是根據(jù)業(yè)務(wù)網(wǎng)需求隨時增加補(bǔ)充的,可以大大提高搜索效率。
為了有效管理大量的數(shù)據(jù),首先要按照元數(shù)據(jù)的定義結(jié)構(gòu)將所有的數(shù)據(jù)掃描入ES庫,并完善元數(shù)據(jù)的相關(guān)內(nèi)容。數(shù)據(jù)掃描入庫流程如圖3所示。
圖3 數(shù)據(jù)入ES數(shù)據(jù)池的流程
在掃描入庫的過程中,自動將每個文件按元數(shù)據(jù)模板中約定好的文件正則表達(dá)進(jìn)行匹配,自動將所掃描到的文件進(jìn)行分類,同時把該文件的存儲路徑、文件大小、創(chuàng)建時間等屬性信息也一并寫入ES庫。在提供數(shù)據(jù)服務(wù)時,不用再次從磁盤中查找文件所在的物理地址,而是從ES庫中準(zhǔn)確、快速地獲取到相應(yīng)的文件地址,大大提高了數(shù)據(jù)服務(wù)效率。
文中共采用3個節(jié)點構(gòu)建集群,按不同數(shù)據(jù)類型獨立建立索引,總共有13個索引,每一類的索引都分布在3個節(jié)點中。ES的數(shù)據(jù)組織結(jié)構(gòu)如圖4所示。可以看出,每一類數(shù)據(jù)都分為六個分片,每個分片有一主一備,既避免了單個索引特別多而導(dǎo)致搜索效率降低,又確保了數(shù)據(jù)安全,即便有節(jié)點出現(xiàn)故障,也不影響數(shù)據(jù)的搜索服務(wù)。
圖4 當(dāng)前系統(tǒng)ES的索引
圖5 按一級大類搜索過濾
該系統(tǒng)在部署實施時,首要任務(wù)是把數(shù)據(jù)掛載到管理服務(wù)器,啟動系統(tǒng)自動掃描功能,把所有待處理的數(shù)據(jù)按照系統(tǒng)設(shè)計的元數(shù)據(jù)規(guī)則錄入到ES數(shù)據(jù)池中。由于數(shù)據(jù)量龐大,導(dǎo)入數(shù)據(jù)時,需要消耗較長的時間。該系統(tǒng)中主要包括兩大類型的文件,其一,每個文件為幾十兆以上,其二,每個文件為幾百k以下,形成了鮮明的對比。因此,掃描占用相同磁盤空間的兩個不同盤所消耗的時間相差很大,例如把30 T的衛(wèi)星數(shù)據(jù)掃描并入庫到ES集群需要20多個小時,而要處理30 T的地面觀測數(shù)據(jù),則需要超過3天的時間。目前,已經(jīng)完成了2015年以來絕大部分的數(shù)據(jù),包括觀測數(shù)據(jù)和二次加工的數(shù)據(jù)產(chǎn)品。在ES數(shù)據(jù)池中已經(jīng)有接入了800多T的數(shù)據(jù),超過5億個數(shù)據(jù)文件。
文中支持全局的模糊搜索、大類模糊搜索、小類模糊搜索和精確搜索。這樣可以滿足多種不同用戶類型的需求,既能搜索所需要的數(shù)據(jù),又不用等待過長的時間,同時還支持按文件時間和掃描時間的方式進(jìn)行的多維條件搜索。
在當(dāng)前規(guī)模的查詢中,按大類搜索基本在秒級之內(nèi)可以完成。如圖5所示,文件數(shù)據(jù)最多的雷達(dá)產(chǎn)品,約2.4億個文件,在0.4秒之內(nèi)就能完成檢索。
圖6是按雷達(dá)基數(shù)據(jù)查詢,2 000多萬條記錄在1.4秒鐘左右完成查詢。
圖6 雷達(dá)基數(shù)的元數(shù)據(jù)信息的查詢結(jié)果
從上述結(jié)果可以看出,當(dāng)前ES集群及分片、分詞等設(shè)計是合理的,可以滿足當(dāng)前業(yè)務(wù)的需求。
數(shù)據(jù)池搜索平臺可以統(tǒng)一管理數(shù)據(jù),滿足為用戶高效、快速提供數(shù)據(jù)的需求。該系統(tǒng)采用3個節(jié)點作為ES集群,可以滿足當(dāng)前5億個數(shù)據(jù)文件的管理并提供數(shù)據(jù)服務(wù),該集群支持動態(tài)擴(kuò)容,可以充分滿足將來更多數(shù)據(jù)量的需求;行業(yè)化的分詞也大大提高了數(shù)據(jù)搜索的效率,該分詞庫也支持?jǐn)U容,擴(kuò)容之后重啟服務(wù)即可,操作較為簡單。系統(tǒng)中采用元數(shù)據(jù)管理的技術(shù),按業(yè)務(wù)和數(shù)據(jù)文件的特征,把全數(shù)據(jù)的數(shù)據(jù)分成了260多個元數(shù)據(jù),統(tǒng)一元數(shù)據(jù)模板,軟件設(shè)計與實現(xiàn)起來較為簡單,系統(tǒng)部署與實施也較為簡單。