夏正龍,鐘艷雯,鄭秋生,朱 亮
(1.湖南省氣象信息中心,長沙 410118;2.氣象防災減災湖南省重點實驗室,長沙 410118)
隨著Hadoop、HBase、ElasticSearch等大數據存儲、處理、運算技術的日益成熟,基于大數據技術的應用研究也成為各行各業重要的課題,中國各級氣象部門也展開了如火如荼的研究,如王若曈等[1]采用Cassandra進行實時氣象數據存儲,設計每類數據對應一個列族,每張表的行被稱作列族的鍵值,類似于該類數據的某一種物理量的磁盤路徑,解決了Micaps4業務系統的海量數據分布式存儲;徐擁軍等[2]利用地面自動站數據量,對分布式數據庫的高性能、高可靠性與可用性、靈活性與可擴展性進行了存儲測試,得出在入庫性能與檢索性能方面都高于傳統數據庫及具有高可靠性、靈活性和擴展性好的分布式集群系統,能提高服務能力、節約建設成本的結論;何林等[3]選用ElasticSearch智能化全文搜索引擎,以中國地面逐小時觀測數據為例,設計了氣象大數據原型系統,并選取5個典型應用場景開展數據檢索和統計分析能力測試,基于ES的氣象大數據原型系統在結構化數據的檢索和統計方面,尤其是多并發訪問的情況下,相比CIMISS(全國綜合氣象信息共享系統)數據服務接口,響應時間性能提升明顯;徐熙超等[4]基于HBase已有的并行數據查詢技術基礎上進行了相應優化,在表設計階段充分考慮了HBase特性與業務系統常規查詢用例,通過協處理器建立適用于海量氣象結構化數據的實時查詢索引,實現了海量數據的快速查詢,以支撐現代氣象業務系統。
目前,已有了一些基于傳統存儲技術建設的成熟氣象數據存儲方案,熊安元等[5]、馬渝勇等[6]對氣象數據的分類和存儲模型進行了詳細的分析,實現了傳統關系型數據庫技術下氣象數據的存儲管理,結合氣象云建設的研究和思考[7],本研究設計以Ha?doop為分布式文件系統,利用HDFS和HBase分別存儲非結構化和結構化氣象數據,選用Elastic?Search建立統一的氣象大數據存儲索引的省級氣象大數據存儲模型(圖1)。

圖1 省級氣象大數據存儲模型邏輯
目前,省級氣象部門通過CMACAST、國內通信系統等每日接收的氣象數據量超過300 Gb,文件數達到百萬級,既有衛星、雷達、各種數值預報預測產品等超過500 Kb的大文件氣象數據,也有各種類型的氣象預報服務產品、文本、圖片、XML、HTML等各類氣象數據產品,以500 Kb以下小文件為主,500 Kb以上文件數少量大。海量的氣象小文件對HDFS的存儲帶來了嚴重的問題,HDFS設計以流式數據訪問模式存儲超大文件,由于namenode需要將每個文件、目錄和數據塊的存儲信息都要存儲在內存,海量的氣象小文件必將占用大量的內存資源,影響系統性能,已有采用Sequence File技術對大量小文件合并處理后存儲在Hadoop分布式文件系統中的研究[8,9],能有效地節約內存資源,提升文件的讀寫性能。本研究選用Avro(數據序列化系統)將氣象數據進行打包后存儲于HDFS,減少文件數,節省內存資源的消耗,同時便于管理,進行Avro數據打包,主要包括Avro數據模式設計、非結構化氣象數據打包存儲規則設計以及打包文件生成3部分,史棟杰[10]通過5種快速序列化框架對1種對象網絡進行序列化和反序列化的時間消耗以及序列化結果的空間消耗,進行性能比較,Avro在總時間方面速度最快,空間耗費也偏小,Avro是獨立于編程語言的數據序列化系統,通常用JSON定義數據模式,數據文件支持壓縮、可切分的,比較適用于MapReduce的輸入格式,擁有自己的接口描述語言Avro IDL。
1.1.1 Avro數據模式設計 壓縮打包后的氣象文件將以一個較大的Avro數據文件形式存儲,為方便查詢、檢索、管理氣象數據,不僅要保存原數據文件的內容,同時應盡可能保留原數據文件的名稱、時間、大小、格式、壓縮打包情況等描述性元數據,Avro可方便地通過數據模式來管理元數據信息和數據內容,有豐富的模式解析能力,支持查詢、增加、刪除、別名、排序等多種功能,Avro數據模式用JSON格式定義示例如下:

1.1.2 打包存儲規則設計 根據非結構化的氣象數據類型、文件數量、收集特征等制定具體的打包存儲規則,包括打包后的文件名規則、存儲目錄、是否需要壓縮等,用歐洲中心數值預報產品壓縮打包配置舉例,壓縮后的打包文件存儲規則設計為:存儲文件名W_NAFP_C_ECMF_%y%M%d_P_C3E.avro,%y(年)%M(月)%d(日)表示按日打包,因該類資料本身為bz2壓縮格式,可不再需要進行壓縮,資料編碼為:F.0010.0002.S001,存儲路徑為HDFS目錄/file/
NWP_ECMF_DAM/。
1.1.3 Avro數據打包文件生成 根據制定的打包存儲規則,利用Avro編程通過讀取非結構化氣象數據文件,新建GenericRecord記錄實例,并使用Data?FileWriter類將記錄實例序列化到Avro文件,并存儲到HDFS目錄中,流程包括:一是要判斷目標文件是否存在,如果存在,獲取追加寫對象,如果不存在,新建目標文件后獲取寫對象;二是判斷是否要設置壓縮編碼格式;三是讀取非結構化氣象數據文件內容和屬性構造GenericRecord對象,并序列化到目標存儲文件,并設置同步標記位;四是寫入或添加相應的氣象數據文件后,及時關閉目標存儲文件讀寫對象,釋放資源(圖2)。

圖2 Avro數據文件打包
隨著觀測業務現代化的發展,各種新型觀測儀器設備、觀測系統投入了使用,湖南省氣象觀測業務能力得到了極大的提高,觀測的時空密度也得到了飛速的發展,自動觀測替代定點定時的人工觀測,觀測頻次由一天幾次逐步提升到小時級,再到現在的分鐘級,觀測密度由固定數量的氣象臺站,發展到包括固定氣象臺站、自動氣象站、區域自動氣象觀測站等多類,站點數量由原來幾十發展現在的幾千。同時,隨著特定觀測任務的開展,觀測資料種類也有了極大的豐富,由原來僅有的地面和高空觀測,增加了自動土壤水分、農氣、GPSMET、L波段探空、閃電、負氧離子等各種類型觀測。氣象觀測數據內容得到了極大的豐富,觀測數據主要由氣象站點屬性信息、時間以及觀測要素值等組成,屬于結構化氣象數據,傳統的氣象數據存儲系統一般采用關系型數據庫,分析數據特點,設計表結構和索引字段進行存儲,通常為減少冗余字段、減少存儲量,會將氣象資料的觀測要素進行拆分表設計,并通過關聯字段進行關聯。但隨著海量氣象大數據的發展,傳統數據存儲管理方式越來越表現出更多的問題,數據存儲的冗余備份、關聯查詢的復雜和效率、索引容量和性能等方面都急需引進新技術解決面臨的困境。目前,各級氣象部門陸續開展針對海量結構化氣象數據在分布式存儲技術中的測試以及應用研究,肯定了大數據存儲等新技術在海量氣象數據存儲中的可行性。HBase是一個在HDFS之上的非關系型數據庫,它依靠HDFS來屏蔽底層系統的異構性,實現集群的負載均衡與容錯。HBase采用鍵值對(Key-Value)存儲數據,行鍵(Rowkey)采用基于LSM樹(Log-Struc?tured Mergetree)的數據存儲結構,所有行鍵在HBase表中有序排列,在主鍵范圍內查找,速度很快?;贖Base數據存儲技術基礎,本研究設計省級結構化氣象數據存儲思路為:①因不同氣象資料的觀測要素、觀測頻次以及使用特點等不同,每一類氣象資料單獨建表管理;②基于HBase設計采用寬表存儲模式,按觀測特征以及應用需求,避免檢索時需要進行關聯查詢,便于統計分析,設計將觀測要素盡量存儲于同一張表中,同時存儲觀測臺站相關信息的元數據;對于觀測要素眾多,頻次、結構以及應用需求等多樣的氣象資料,依據特定觀測特征和應用需求,進行不同的應用分類,適當將特定觀測要素進行分表存儲,同時存儲觀測臺站相關信息的元數據,如地面觀測資料觀測種類繁多,不僅包括氣溫、氣壓、濕度、風、降水等常規觀測要素,而且還包括觀測天氣現象、云、能見度、分鐘降水、地溫、數據質控碼等特殊觀測,設計采用多寬表存儲,將測站基本信息、氣壓、氣溫、濕度、風、降水、云、能見度、天氣現象等氣象預報業務常規要素存儲于一張表,將測站基本信息、分鐘降水、地溫以及其他特殊觀測項目存儲于一張表;③氣象觀測數據一般都包含觀測時間與區站信息,為確保行鍵的惟一性,同時以時間開始會造成“熱點寫”現象,行鍵設計為:區站號_觀測時間_資料代碼標識,對同一類資料區站號是具有惟一性的,故此行鍵設計是可以保障惟一性的,資料代碼標識延用CI?MISS系統的氣象資料分類與編碼,可保障每一類資料的編碼惟一性。
省級氣象大數據存儲索引設計的優劣嚴重影響著氣象數據檢索策略和檢索效率,氣象數據檢索策略多樣要求索引設計靈活,檢索效率高要求索引設計合理。傳統氣象結構化數據一般直接在存儲數據表上設計索引字段,非結構化氣象數據存儲以數據庫索引表和文件相結合的方式,本研究選用ElasticSearch全文搜索引擎工具(簡稱ES)設計統一的省級氣象大數據存儲索引庫模型,結合應用需求,設計建立結構化氣象數據字段存儲索引和非結構化氣象數據文件存儲索引,ES本質上是一個分布式數據庫,允許多臺服務器協同工作,每臺服務器可以運行多個ES實例,ES在存儲數據時會索引所有字段,經過處理后寫入一個反向索引,查找數據時,直接查找該索引,從而提高查詢速度。通過ES建立統一的省級氣象大數據存儲索引庫,將索引和數據單獨存儲:一是統一了檢索入口,提高檢索的便捷性;二是可根據檢索的不同需求,設計不同的存儲索引,提高了檢索靈活性;三是簡化了管理,索引的變動不影響數據的存儲。
結構化氣象數據存儲在HBase數據表中,而HBase是通過行主鍵快速定位并獲取數據,對于其他要素字段的查詢,則需要通過使用遍歷過濾查詢,對于海量數據查詢時,不能快速確定行主鍵,數據行數越多,遍歷過濾則越慢,主鍵的設計往往不能滿足各方面的檢索需求,本研究根據應用需求建立相關查詢要素和行主鍵的索引,實現檢索查詢時,可先通過檢索ES對應的索引,獲取需要定位的行主鍵集合,再通過HBase的行主鍵快速定位并獲取數據,可極大地避免使用HBase的遍歷過濾,提高查詢效率,以地面觀測資料為例,如需實現對地面觀測資料整行數據的檢索查詢,可建立“觀測時間、臺站號、經緯度、行主鍵”等字段的索引庫;如需實現對指定氣溫范圍的地面觀測資料檢索查詢,可建立“觀測時間、臺站號、經緯度、氣溫、行主鍵”等字段的索引庫(圖3)。

圖3 ES地面觀測資料(結構化氣象數據)索引查詢示例
非結構化氣象數據打包存儲成Avro文件,并存儲在HDFS中,打包后的Avro文件比較大,極大減少了小文件數目,節約了內存資源,提升了系統性能,雖然Avro數據模式可以進行解譯,但往往查找保存在其中的一份非結構化氣象數據文件,需要遍歷Avro文件存儲內容,不能快速定位,查詢效率比較低,提升了檢索難度,本研究通過ES設計建立每一份非結構化氣象數據文件的名稱、時間、大小、格式、資料編碼等原始文件信息和打包后存儲文件路徑、文件同步標記位等存儲信息的索引庫,檢索文件時,通過檢索ES獲取Avro打包文件存儲路徑,再根據文件同步標記位,可利用Avro編程方法中DatumRead?er和DataFileReader對象讀取并解譯,快速定位并獲取指定數據文件(圖4)。

圖4 ES歐洲中心模式數據(非結構氣象數據)文件存儲索引查詢示例
本研究設計了海量的非結構化氣象數據小文件通過Avro打包后存儲在HDFS、海量的結構化氣象數據通過HBase采用寬表存儲、選用ElasticSearch建立統一的省級氣象大數據存儲索引庫的省級氣象大數據存儲模型,給各省氣象部門開展氣象大數據存儲規劃和方案制訂等工作提供借鑒參考,但目前存儲模型設計中仍有很多細節需要進一步完善,還未能滿足業務化要求。