夏正龍,鐘艷雯,鄭秋生,朱 亮
(1.湖南省氣象信息中心,長(zhǎng)沙 410118;2.氣象防災(zāi)減災(zāi)湖南省重點(diǎn)實(shí)驗(yàn)室,長(zhǎng)沙 410118)
隨著Hadoop、HBase、ElasticSearch等大數(shù)據(jù)存儲(chǔ)、處理、運(yùn)算技術(shù)的日益成熟,基于大數(shù)據(jù)技術(shù)的應(yīng)用研究也成為各行各業(yè)重要的課題,中國(guó)各級(jí)氣象部門(mén)也展開(kāi)了如火如荼的研究,如王若曈等[1]采用Cassandra進(jìn)行實(shí)時(shí)氣象數(shù)據(jù)存儲(chǔ),設(shè)計(jì)每類(lèi)數(shù)據(jù)對(duì)應(yīng)一個(gè)列族,每張表的行被稱(chēng)作列族的鍵值,類(lèi)似于該類(lèi)數(shù)據(jù)的某一種物理量的磁盤(pán)路徑,解決了Micaps4業(yè)務(wù)系統(tǒng)的海量數(shù)據(jù)分布式存儲(chǔ);徐擁軍等[2]利用地面自動(dòng)站數(shù)據(jù)量,對(duì)分布式數(shù)據(jù)庫(kù)的高性能、高可靠性與可用性、靈活性與可擴(kuò)展性進(jìn)行了存儲(chǔ)測(cè)試,得出在入庫(kù)性能與檢索性能方面都高于傳統(tǒng)數(shù)據(jù)庫(kù)及具有高可靠性、靈活性和擴(kuò)展性好的分布式集群系統(tǒng),能提高服務(wù)能力、節(jié)約建設(shè)成本的結(jié)論;何林等[3]選用ElasticSearch智能化全文搜索引擎,以中國(guó)地面逐小時(shí)觀(guān)測(cè)數(shù)據(jù)為例,設(shè)計(jì)了氣象大數(shù)據(jù)原型系統(tǒng),并選取5個(gè)典型應(yīng)用場(chǎng)景開(kāi)展數(shù)據(jù)檢索和統(tǒng)計(jì)分析能力測(cè)試,基于ES的氣象大數(shù)據(jù)原型系統(tǒng)在結(jié)構(gòu)化數(shù)據(jù)的檢索和統(tǒng)計(jì)方面,尤其是多并發(fā)訪(fǎng)問(wèn)的情況下,相比CIMISS(全國(guó)綜合氣象信息共享系統(tǒng))數(shù)據(jù)服務(wù)接口,響應(yīng)時(shí)間性能提升明顯;徐熙超等[4]基于HBase已有的并行數(shù)據(jù)查詢(xún)技術(shù)基礎(chǔ)上進(jìn)行了相應(yīng)優(yōu)化,在表設(shè)計(jì)階段充分考慮了HBase特性與業(yè)務(wù)系統(tǒng)常規(guī)查詢(xún)用例,通過(guò)協(xié)處理器建立適用于海量氣象結(jié)構(gòu)化數(shù)據(jù)的實(shí)時(shí)查詢(xún)索引,實(shí)現(xiàn)了海量數(shù)據(jù)的快速查詢(xún),以支撐現(xiàn)代氣象業(yè)務(wù)系統(tǒng)。
目前,已有了一些基于傳統(tǒng)存儲(chǔ)技術(shù)建設(shè)的成熟氣象數(shù)據(jù)存儲(chǔ)方案,熊安元等[5]、馬渝勇等[6]對(duì)氣象數(shù)據(jù)的分類(lèi)和存儲(chǔ)模型進(jìn)行了詳細(xì)的分析,實(shí)現(xiàn)了傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)技術(shù)下氣象數(shù)據(jù)的存儲(chǔ)管理,結(jié)合氣象云建設(shè)的研究和思考[7],本研究設(shè)計(jì)以Ha?doop為分布式文件系統(tǒng),利用HDFS和HBase分別存儲(chǔ)非結(jié)構(gòu)化和結(jié)構(gòu)化氣象數(shù)據(jù),選用Elastic?Search建立統(tǒng)一的氣象大數(shù)據(jù)存儲(chǔ)索引的省級(jí)氣象大數(shù)據(jù)存儲(chǔ)模型(圖1)。
圖1 省級(jí)氣象大數(shù)據(jù)存儲(chǔ)模型邏輯
目前,省級(jí)氣象部門(mén)通過(guò)CMACAST、國(guó)內(nèi)通信系統(tǒng)等每日接收的氣象數(shù)據(jù)量超過(guò)300 Gb,文件數(shù)達(dá)到百萬(wàn)級(jí),既有衛(wèi)星、雷達(dá)、各種數(shù)值預(yù)報(bào)預(yù)測(cè)產(chǎn)品等超過(guò)500 Kb的大文件氣象數(shù)據(jù),也有各種類(lèi)型的氣象預(yù)報(bào)服務(wù)產(chǎn)品、文本、圖片、XML、HTML等各類(lèi)氣象數(shù)據(jù)產(chǎn)品,以500 Kb以下小文件為主,500 Kb以上文件數(shù)少量大。海量的氣象小文件對(duì)HDFS的存儲(chǔ)帶來(lái)了嚴(yán)重的問(wèn)題,HDFS設(shè)計(jì)以流式數(shù)據(jù)訪(fǎng)問(wèn)模式存儲(chǔ)超大文件,由于namenode需要將每個(gè)文件、目錄和數(shù)據(jù)塊的存儲(chǔ)信息都要存儲(chǔ)在內(nèi)存,海量的氣象小文件必將占用大量的內(nèi)存資源,影響系統(tǒng)性能,已有采用Sequence File技術(shù)對(duì)大量小文件合并處理后存儲(chǔ)在Hadoop分布式文件系統(tǒng)中的研究[8,9],能有效地節(jié)約內(nèi)存資源,提升文件的讀寫(xiě)性能。本研究選用Avro(數(shù)據(jù)序列化系統(tǒng))將氣象數(shù)據(jù)進(jìn)行打包后存儲(chǔ)于HDFS,減少文件數(shù),節(jié)省內(nèi)存資源的消耗,同時(shí)便于管理,進(jìn)行Avro數(shù)據(jù)打包,主要包括Avro數(shù)據(jù)模式設(shè)計(jì)、非結(jié)構(gòu)化氣象數(shù)據(jù)打包存儲(chǔ)規(guī)則設(shè)計(jì)以及打包文件生成3部分,史棟杰[10]通過(guò)5種快速序列化框架對(duì)1種對(duì)象網(wǎng)絡(luò)進(jìn)行序列化和反序列化的時(shí)間消耗以及序列化結(jié)果的空間消耗,進(jìn)行性能比較,Avro在總時(shí)間方面速度最快,空間耗費(fèi)也偏小,Avro是獨(dú)立于編程語(yǔ)言的數(shù)據(jù)序列化系統(tǒng),通常用JSON定義數(shù)據(jù)模式,數(shù)據(jù)文件支持壓縮、可切分的,比較適用于MapReduce的輸入格式,擁有自己的接口描述語(yǔ)言Avro IDL。
1.1.1 Avro數(shù)據(jù)模式設(shè)計(jì) 壓縮打包后的氣象文件將以一個(gè)較大的Avro數(shù)據(jù)文件形式存儲(chǔ),為方便查詢(xún)、檢索、管理氣象數(shù)據(jù),不僅要保存原數(shù)據(jù)文件的內(nèi)容,同時(shí)應(yīng)盡可能保留原數(shù)據(jù)文件的名稱(chēng)、時(shí)間、大小、格式、壓縮打包情況等描述性元數(shù)據(jù),Avro可方便地通過(guò)數(shù)據(jù)模式來(lái)管理元數(shù)據(jù)信息和數(shù)據(jù)內(nèi)容,有豐富的模式解析能力,支持查詢(xún)、增加、刪除、別名、排序等多種功能,Avro數(shù)據(jù)模式用JSON格式定義示例如下:
1.1.2 打包存儲(chǔ)規(guī)則設(shè)計(jì) 根據(jù)非結(jié)構(gòu)化的氣象數(shù)據(jù)類(lèi)型、文件數(shù)量、收集特征等制定具體的打包存儲(chǔ)規(guī)則,包括打包后的文件名規(guī)則、存儲(chǔ)目錄、是否需要壓縮等,用歐洲中心數(shù)值預(yù)報(bào)產(chǎn)品壓縮打包配置舉例,壓縮后的打包文件存儲(chǔ)規(guī)則設(shè)計(jì)為:存儲(chǔ)文件名W_NAFP_C_ECMF_%y%M%d_P_C3E.avro,%y(年)%M(月)%d(日)表示按日打包,因該類(lèi)資料本身為bz2壓縮格式,可不再需要進(jìn)行壓縮,資料編碼為:F.0010.0002.S001,存儲(chǔ)路徑為HDFS目錄/file/
NWP_ECMF_DAM/。
1.1.3 Avro數(shù)據(jù)打包文件生成 根據(jù)制定的打包存儲(chǔ)規(guī)則,利用Avro編程通過(guò)讀取非結(jié)構(gòu)化氣象數(shù)據(jù)文件,新建GenericRecord記錄實(shí)例,并使用Data?FileWriter類(lèi)將記錄實(shí)例序列化到Avro文件,并存儲(chǔ)到HDFS目錄中,流程包括:一是要判斷目標(biāo)文件是否存在,如果存在,獲取追加寫(xiě)對(duì)象,如果不存在,新建目標(biāo)文件后獲取寫(xiě)對(duì)象;二是判斷是否要設(shè)置壓縮編碼格式;三是讀取非結(jié)構(gòu)化氣象數(shù)據(jù)文件內(nèi)容和屬性構(gòu)造GenericRecord對(duì)象,并序列化到目標(biāo)存儲(chǔ)文件,并設(shè)置同步標(biāo)記位;四是寫(xiě)入或添加相應(yīng)的氣象數(shù)據(jù)文件后,及時(shí)關(guān)閉目標(biāo)存儲(chǔ)文件讀寫(xiě)對(duì)象,釋放資源(圖2)。
圖2 Avro數(shù)據(jù)文件打包
隨著觀(guān)測(cè)業(yè)務(wù)現(xiàn)代化的發(fā)展,各種新型觀(guān)測(cè)儀器設(shè)備、觀(guān)測(cè)系統(tǒng)投入了使用,湖南省氣象觀(guān)測(cè)業(yè)務(wù)能力得到了極大的提高,觀(guān)測(cè)的時(shí)空密度也得到了飛速的發(fā)展,自動(dòng)觀(guān)測(cè)替代定點(diǎn)定時(shí)的人工觀(guān)測(cè),觀(guān)測(cè)頻次由一天幾次逐步提升到小時(shí)級(jí),再到現(xiàn)在的分鐘級(jí),觀(guān)測(cè)密度由固定數(shù)量的氣象臺(tái)站,發(fā)展到包括固定氣象臺(tái)站、自動(dòng)氣象站、區(qū)域自動(dòng)氣象觀(guān)測(cè)站等多類(lèi),站點(diǎn)數(shù)量由原來(lái)幾十發(fā)展現(xiàn)在的幾千。同時(shí),隨著特定觀(guān)測(cè)任務(wù)的開(kāi)展,觀(guān)測(cè)資料種類(lèi)也有了極大的豐富,由原來(lái)僅有的地面和高空觀(guān)測(cè),增加了自動(dòng)土壤水分、農(nóng)氣、GPSMET、L波段探空、閃電、負(fù)氧離子等各種類(lèi)型觀(guān)測(cè)。氣象觀(guān)測(cè)數(shù)據(jù)內(nèi)容得到了極大的豐富,觀(guān)測(cè)數(shù)據(jù)主要由氣象站點(diǎn)屬性信息、時(shí)間以及觀(guān)測(cè)要素值等組成,屬于結(jié)構(gòu)化氣象數(shù)據(jù),傳統(tǒng)的氣象數(shù)據(jù)存儲(chǔ)系統(tǒng)一般采用關(guān)系型數(shù)據(jù)庫(kù),分析數(shù)據(jù)特點(diǎn),設(shè)計(jì)表結(jié)構(gòu)和索引字段進(jìn)行存儲(chǔ),通常為減少冗余字段、減少存儲(chǔ)量,會(huì)將氣象資料的觀(guān)測(cè)要素進(jìn)行拆分表設(shè)計(jì),并通過(guò)關(guān)聯(lián)字段進(jìn)行關(guān)聯(lián)。但隨著海量氣象大數(shù)據(jù)的發(fā)展,傳統(tǒng)數(shù)據(jù)存儲(chǔ)管理方式越來(lái)越表現(xiàn)出更多的問(wèn)題,數(shù)據(jù)存儲(chǔ)的冗余備份、關(guān)聯(lián)查詢(xún)的復(fù)雜和效率、索引容量和性能等方面都急需引進(jìn)新技術(shù)解決面臨的困境。目前,各級(jí)氣象部門(mén)陸續(xù)開(kāi)展針對(duì)海量結(jié)構(gòu)化氣象數(shù)據(jù)在分布式存儲(chǔ)技術(shù)中的測(cè)試以及應(yīng)用研究,肯定了大數(shù)據(jù)存儲(chǔ)等新技術(shù)在海量氣象數(shù)據(jù)存儲(chǔ)中的可行性。HBase是一個(gè)在HDFS之上的非關(guān)系型數(shù)據(jù)庫(kù),它依靠HDFS來(lái)屏蔽底層系統(tǒng)的異構(gòu)性,實(shí)現(xiàn)集群的負(fù)載均衡與容錯(cuò)。HBase采用鍵值對(duì)(Key-Value)存儲(chǔ)數(shù)據(jù),行鍵(Rowkey)采用基于LSM樹(shù)(Log-Struc?tured Mergetree)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),所有行鍵在HBase表中有序排列,在主鍵范圍內(nèi)查找,速度很快?;贖Base數(shù)據(jù)存儲(chǔ)技術(shù)基礎(chǔ),本研究設(shè)計(jì)省級(jí)結(jié)構(gòu)化氣象數(shù)據(jù)存儲(chǔ)思路為:①因不同氣象資料的觀(guān)測(cè)要素、觀(guān)測(cè)頻次以及使用特點(diǎn)等不同,每一類(lèi)氣象資料單獨(dú)建表管理;②基于HBase設(shè)計(jì)采用寬表存儲(chǔ)模式,按觀(guān)測(cè)特征以及應(yīng)用需求,避免檢索時(shí)需要進(jìn)行關(guān)聯(lián)查詢(xún),便于統(tǒng)計(jì)分析,設(shè)計(jì)將觀(guān)測(cè)要素盡量存儲(chǔ)于同一張表中,同時(shí)存儲(chǔ)觀(guān)測(cè)臺(tái)站相關(guān)信息的元數(shù)據(jù);對(duì)于觀(guān)測(cè)要素眾多,頻次、結(jié)構(gòu)以及應(yīng)用需求等多樣的氣象資料,依據(jù)特定觀(guān)測(cè)特征和應(yīng)用需求,進(jìn)行不同的應(yīng)用分類(lèi),適當(dāng)將特定觀(guān)測(cè)要素進(jìn)行分表存儲(chǔ),同時(shí)存儲(chǔ)觀(guān)測(cè)臺(tái)站相關(guān)信息的元數(shù)據(jù),如地面觀(guān)測(cè)資料觀(guān)測(cè)種類(lèi)繁多,不僅包括氣溫、氣壓、濕度、風(fēng)、降水等常規(guī)觀(guān)測(cè)要素,而且還包括觀(guān)測(cè)天氣現(xiàn)象、云、能見(jiàn)度、分鐘降水、地溫、數(shù)據(jù)質(zhì)控碼等特殊觀(guān)測(cè),設(shè)計(jì)采用多寬表存儲(chǔ),將測(cè)站基本信息、氣壓、氣溫、濕度、風(fēng)、降水、云、能見(jiàn)度、天氣現(xiàn)象等氣象預(yù)報(bào)業(yè)務(wù)常規(guī)要素存儲(chǔ)于一張表,將測(cè)站基本信息、分鐘降水、地溫以及其他特殊觀(guān)測(cè)項(xiàng)目存儲(chǔ)于一張表;③氣象觀(guān)測(cè)數(shù)據(jù)一般都包含觀(guān)測(cè)時(shí)間與區(qū)站信息,為確保行鍵的惟一性,同時(shí)以時(shí)間開(kāi)始會(huì)造成“熱點(diǎn)寫(xiě)”現(xiàn)象,行鍵設(shè)計(jì)為:區(qū)站號(hào)_觀(guān)測(cè)時(shí)間_資料代碼標(biāo)識(shí),對(duì)同一類(lèi)資料區(qū)站號(hào)是具有惟一性的,故此行鍵設(shè)計(jì)是可以保障惟一性的,資料代碼標(biāo)識(shí)延用CI?MISS系統(tǒng)的氣象資料分類(lèi)與編碼,可保障每一類(lèi)資料的編碼惟一性。
省級(jí)氣象大數(shù)據(jù)存儲(chǔ)索引設(shè)計(jì)的優(yōu)劣嚴(yán)重影響著氣象數(shù)據(jù)檢索策略和檢索效率,氣象數(shù)據(jù)檢索策略多樣要求索引設(shè)計(jì)靈活,檢索效率高要求索引設(shè)計(jì)合理。傳統(tǒng)氣象結(jié)構(gòu)化數(shù)據(jù)一般直接在存儲(chǔ)數(shù)據(jù)表上設(shè)計(jì)索引字段,非結(jié)構(gòu)化氣象數(shù)據(jù)存儲(chǔ)以數(shù)據(jù)庫(kù)索引表和文件相結(jié)合的方式,本研究選用ElasticSearch全文搜索引擎工具(簡(jiǎn)稱(chēng)ES)設(shè)計(jì)統(tǒng)一的省級(jí)氣象大數(shù)據(jù)存儲(chǔ)索引庫(kù)模型,結(jié)合應(yīng)用需求,設(shè)計(jì)建立結(jié)構(gòu)化氣象數(shù)據(jù)字段存儲(chǔ)索引和非結(jié)構(gòu)化氣象數(shù)據(jù)文件存儲(chǔ)索引,ES本質(zhì)上是一個(gè)分布式數(shù)據(jù)庫(kù),允許多臺(tái)服務(wù)器協(xié)同工作,每臺(tái)服務(wù)器可以運(yùn)行多個(gè)ES實(shí)例,ES在存儲(chǔ)數(shù)據(jù)時(shí)會(huì)索引所有字段,經(jīng)過(guò)處理后寫(xiě)入一個(gè)反向索引,查找數(shù)據(jù)時(shí),直接查找該索引,從而提高查詢(xún)速度。通過(guò)ES建立統(tǒng)一的省級(jí)氣象大數(shù)據(jù)存儲(chǔ)索引庫(kù),將索引和數(shù)據(jù)單獨(dú)存儲(chǔ):一是統(tǒng)一了檢索入口,提高檢索的便捷性;二是可根據(jù)檢索的不同需求,設(shè)計(jì)不同的存儲(chǔ)索引,提高了檢索靈活性;三是簡(jiǎn)化了管理,索引的變動(dòng)不影響數(shù)據(jù)的存儲(chǔ)。
結(jié)構(gòu)化氣象數(shù)據(jù)存儲(chǔ)在HBase數(shù)據(jù)表中,而HBase是通過(guò)行主鍵快速定位并獲取數(shù)據(jù),對(duì)于其他要素字段的查詢(xún),則需要通過(guò)使用遍歷過(guò)濾查詢(xún),對(duì)于海量數(shù)據(jù)查詢(xún)時(shí),不能快速確定行主鍵,數(shù)據(jù)行數(shù)越多,遍歷過(guò)濾則越慢,主鍵的設(shè)計(jì)往往不能滿(mǎn)足各方面的檢索需求,本研究根據(jù)應(yīng)用需求建立相關(guān)查詢(xún)要素和行主鍵的索引,實(shí)現(xiàn)檢索查詢(xún)時(shí),可先通過(guò)檢索ES對(duì)應(yīng)的索引,獲取需要定位的行主鍵集合,再通過(guò)HBase的行主鍵快速定位并獲取數(shù)據(jù),可極大地避免使用HBase的遍歷過(guò)濾,提高查詢(xún)效率,以地面觀(guān)測(cè)資料為例,如需實(shí)現(xiàn)對(duì)地面觀(guān)測(cè)資料整行數(shù)據(jù)的檢索查詢(xún),可建立“觀(guān)測(cè)時(shí)間、臺(tái)站號(hào)、經(jīng)緯度、行主鍵”等字段的索引庫(kù);如需實(shí)現(xiàn)對(duì)指定氣溫范圍的地面觀(guān)測(cè)資料檢索查詢(xún),可建立“觀(guān)測(cè)時(shí)間、臺(tái)站號(hào)、經(jīng)緯度、氣溫、行主鍵”等字段的索引庫(kù)(圖3)。
圖3 ES地面觀(guān)測(cè)資料(結(jié)構(gòu)化氣象數(shù)據(jù))索引查詢(xún)示例
非結(jié)構(gòu)化氣象數(shù)據(jù)打包存儲(chǔ)成Avro文件,并存儲(chǔ)在HDFS中,打包后的Avro文件比較大,極大減少了小文件數(shù)目,節(jié)約了內(nèi)存資源,提升了系統(tǒng)性能,雖然Avro數(shù)據(jù)模式可以進(jìn)行解譯,但往往查找保存在其中的一份非結(jié)構(gòu)化氣象數(shù)據(jù)文件,需要遍歷Avro文件存儲(chǔ)內(nèi)容,不能快速定位,查詢(xún)效率比較低,提升了檢索難度,本研究通過(guò)ES設(shè)計(jì)建立每一份非結(jié)構(gòu)化氣象數(shù)據(jù)文件的名稱(chēng)、時(shí)間、大小、格式、資料編碼等原始文件信息和打包后存儲(chǔ)文件路徑、文件同步標(biāo)記位等存儲(chǔ)信息的索引庫(kù),檢索文件時(shí),通過(guò)檢索ES獲取Avro打包文件存儲(chǔ)路徑,再根據(jù)文件同步標(biāo)記位,可利用Avro編程方法中DatumRead?er和DataFileReader對(duì)象讀取并解譯,快速定位并獲取指定數(shù)據(jù)文件(圖4)。
圖4 ES歐洲中心模式數(shù)據(jù)(非結(jié)構(gòu)氣象數(shù)據(jù))文件存儲(chǔ)索引查詢(xún)示例
本研究設(shè)計(jì)了海量的非結(jié)構(gòu)化氣象數(shù)據(jù)小文件通過(guò)Avro打包后存儲(chǔ)在HDFS、海量的結(jié)構(gòu)化氣象數(shù)據(jù)通過(guò)HBase采用寬表存儲(chǔ)、選用ElasticSearch建立統(tǒng)一的省級(jí)氣象大數(shù)據(jù)存儲(chǔ)索引庫(kù)的省級(jí)氣象大數(shù)據(jù)存儲(chǔ)模型,給各省氣象部門(mén)開(kāi)展氣象大數(shù)據(jù)存儲(chǔ)規(guī)劃和方案制訂等工作提供借鑒參考,但目前存儲(chǔ)模型設(shè)計(jì)中仍有很多細(xì)節(jié)需要進(jìn)一步完善,還未能滿(mǎn)足業(yè)務(wù)化要求。