何 林,邓凤东,曹 波,王 垒,高 宇
(陕西省气象信息中心,陕西 西安 710014)
随着气象观测水平的不断提高,气象数据种类、频次都大幅增加,气象数据与其他行业数据融合,外延不断增加,基本已形成大数据规模。据国家气象信息中心的调研分析,当前与气象相关的数据资源累计约2 310种,国家级、省级存有的各类气象数据总量约26 PB,仅2016年数据增量就超过1.8PB[1]。气象数据蕴含着丰富的应用和研究价值,已被业界普遍认可。气象数据一般可分为结构化、非结构、半结构数据三大类[2]。在众多种类的气象数据中,存储于关系型数据库中的结构化观测资料的使用最为广泛,例如通过对长时间序列的实况监测资料进行统计分析,以历史上相似天气现象所发生的天气或气候变化的概率为依据,开展气候预测业务的经典方法等[3]。
本文以解决传统气象业务应用中,结构化数据检索和统计分析效率较低的痛点问题为切入点,选用ElasticSearch全文搜索引擎工具(简称ES),搭建一个气象大数据原型系统。该系统从全国综合气象信息共享平台(China Integrated Meteorological Information Service System,CIMISS系统)接入数据,涵盖了气象数据的汇聚采集、加工处理、存储管理、应用服务等全部业务流程[4],并开放标准化的数据访问接口,以支持气象应用系统的对接。通过设计并实现原型系统、采集并存储真实的业务数据、选取典型用例进行对比测试等过程,验证了原型系统的合理性和可操作性,为未来探索气象行业大数据+互联网大数据的分析应用准备了数据平台,并奠定了理论和实践基础。
气象大数据原型系统分为四层,系统架构如图1所示。
图1 气象大数据原型系统整体架构Fig.1 The Overall Architecture Meteorological Big Data Prototype System
基础设施层主要是搭建原型系统所需的服务器、存储阵列及网络设备等,采用集群方式搭建,计算节点及存储空间可线性扩展。数据平台层为整个原型系统的核心,数据来源为国省统一的CIMISS数据环境。基于CIMISS提供的数据接口采集和同步数据[5],同时进行必要的加工处理,将原始数据及算法加工处理生成的产品存储于Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)及ElasticSearch分布式数据库。数据服务层通过对ES提供的接口进行封装,形成JAVA、RESTful和类SQL语句三种数据调用和访问方式。业务应用层将各类应用场景转换为三大类,包括数据检索、统计分析、数据可视化展示。可满足历史同期分析、长时间序列数据下载等业务应用场景的基本需求,并支持对平台存储的各类数据和产品进行可视化展示。
本文的原型系统以中国地面逐小时观测资料为研究对象。该资料时序较长,且保存相对完整,经粗略统计,从1951年至今,全国地面观测站,包括国家站和区域站,总存储的逐时观测数据记录数逾30亿条,规模较大。在此数据的基础上,可通过算法加工,衍生得到日、候、旬、月、季、年及30 a整编等不同尺度的统计产品[6],具有较高的实用价值。另一方面,CIMISS系统设计时,该数据存储于单表中,在使用时存在明显瓶颈,大数据量检索和统计分析耗时较长,在应用方面具有较大的优化空间。
气象大数据原型系统的数据采集模块通过调用气象数据统一服务接口(Meteorological Unified Service Interface Community,简称MUSIC)实现。MUSIC基于国省统一的CIMISS数据环境,面向气象业务和科研,提供了统一、标准、丰富、具有多种调用形式的数据访问服务和应用编程接口,为各级应用系统提供直接支撑的数据接入服务[7]。调用MUSIC的JAVA API接口,研发数据ETL(抽取、转换、加载)工具,实现将中国地面逐小时数据(资料编码为SURF_CHN_MUL_HOR)采集并同步到大数据原型系统对应的数据表中。
数据采集分为历史数据导入和实时数据同步两大类。历史数据导入为一次性运行的脚本,使用按时间段检索地面数据要素接口,由于该接口的单次数据访问时限为3 d,因此需循环检索数据,再导入目标表[8]。实时数据同步可复用历史数据导入的接口,设置时间段参数为上次结束同步时间到当前时间,并配置定时执行策略。由于CIMISS中,当前时次整点数据的入库呈现类指数方式的增长,为保证数据时效,实时同步程序定时执行策略为每时次的01、02、03、05、07、10、30、59分。数据采集模块详细设计参数见表1。
表1 大数据原型系统数据采集模块设计参数Tab.1 The Design Parameters of Data Acquisition Module in the Big Data Prototype System
注:数据来源为中国地面逐小时资料,接口为按时间段检索地面数据要素。
在数据处理模块,主要是对导入的原始数据进行清洗、更新以及二次加工等操作。数据清洗主要是针对中国地面逐小时观测数据中的一些异常值和无效值进行剔除,例如在出现自动气象站设备之前,主要依靠每日定时的人工观测,非人工观测时段的数据即为无效值,可按需剔除。本次原型系统搭建,为保证数据规模,对该类数据予以保留。数据更新主要是对更正报文导致的数据记录进行处理,本次原型系统搭建,当出现同一站号相同观测数据记录时,采用删除旧记录,插入新记录的策略进行数据更新。数据二次加工可通过部署一些算法实现数据的实时处理并生成相应产品。例如,实时监测数据完整性,当完整性达到设定的阈值后,启动日值统计算法,并将生成的日数据产品存储于相应的产品表或文件系统。
大数据的存取面临存储容量和存取速度两方面的问题[9],因此存储选型设计是大数据原型系统的核心。本文搭建的原型系统选用ElasticSearch智能化全文搜索引擎,特别适用于快速地储存、搜索和分析海量数据的应用场景。
ES本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个ES实例。单个ES实例称为一个节点,一组节点构成一个集群,ES采用无中心化的集群设计方式,将多个分片均衡地分布在集群的所有可用节点上[10],不会因某个节点的故障而导致整个集群崩溃。ES在存储数据时会索引所有字段,经过处理后写入一个反向索引。查找数据时,直接查找该索引,从而提高查询速度。索引类似于传统关系数据库中的数据库,数据表即索引类型,索引的单条记录称为 Document(文档),一般用JSON格式进行表示。同一个索引里面的文档,不要求有相同的结构,但是最好保持相同,这样有利于提高搜索效率,这与NoSql数据库的特点非常类似。
以中国地面逐小时观测数据为例,将CIMISS中存储的中国地面逐小时资料的211个字段(含质控码字段)全部进行同步,ES文档的属性与CIMISS表结构的字段一一对应,插入ES文档时,自动进行了全字段索引。同时,为增强可靠性,对所有数据要素进行双副本存储,某索引分片失效时可启用副本及时恢复。随着数据量的增长,单个索引量非常大时可适当地增加节点,ES通过自动发现节点机制,重新分片和索引数据[11]。类似关系型数据库中的垂直拆分、水平拆分等分片策略,将逐小时观测数据打散在不同的节点上。
ES本身提供了RESTful风格的应用编程接口,包括PUT、GET、DELETE等方法,实现对文档的添加、更新、查询、删除等基本操作。为使上层应用接入时可选用更多样的数据调用方式,大数据原型系统对ES接口进行封装,实现了JAVA API、RESTful和类SQL语句3种数据服务接口。以下代码示例了使用类SQL语句接口,实现“查询2009年11月11日,陕西省平均最高气温<0 ℃的所有气象站点列表”。
Search surf_wea_chn_mul_hor_tab* where PROVINCE ='陕西'and D_DATETIME>"2009-11-11 00∶00∶00" and D_DATETIME<"2009-11-11 23∶00∶00" | avg(V12011) as s group by (V04001,V01301,CNAME ) MAP t | SQL "select CNAME as 站点,s as 平均最高气温 from t where s<0"
基于ElasticSearch的气象大数据原型系统在陕西省气象局进行了测试。使用5台服务器,4块固态硬盘搭建集群,基于ES搜索引擎和Spark架构,提供实时检索、交互式统计分析、数据挖掘等计算能力。通过与CIMISS系统对接,原型系统共采集了近13亿条中国地面逐小时观测数据记录,并进行双副本存储和全表索引。图2为气象大数据原型系统数据采集和索引构建概览界面的截图,通过安装ES-head插件实现。展示了ElasticSearch集群的配置环境信息,同时,记录了以年为单位的数据分片及数据量的大小。
选取了5个典型应用场景对气象大数据原型系统的数据检索和统计分析能力进行了测试,应用场景清单见表2,包括业务中常用的、较有代表性的多并发数据检索、历史数据排名、历史同期分析等应用。经过测试,同等条件下,CIMISS系统中响应较慢的长时间序列数据检索和统计分析等接口,在大数据原型系统中基本都可以达到秒级响应。图3为针对相同应用场景,CIMISS和基于ES的大数据原型系统分别在10、50、100、200等递增的不同数量并发请求时,响应速度的对比图。纵向比较,随着并发数的增加,CIMISS系统响应时间也成倍提升,最高平均耗时超过3 s,而大数据原型系统的响应时间没有发生明显波动,始终保持在毫秒级。横向比较,在并发数较少的情况下,两个系统响应时间的差距并不大,而在并发量激增时,基于ES的大数据原型系统的性能则明显优于基于Oracle-RAC的CIMISS系统。
图2 气象大数据原型系统数据采集和索引构建界面 Fig.2 The Data Acquisition and Index Construction Interface in the Meteorological Big Data Prototype System
序号应用场景描述测试结果1陕西省国家站小时数据气温要素多并发查询1 000并发,平均响应时间822 ms2陕西省所有地面观测站点历史汛期总降水量排名TOP20共5次测试,平均用时583.2 ms3陕西省日降水量超过阈值的日期和站点分析共5次测试,平均用时377.8 ms4指定站点历年汛期日降水量超过阈值的天数统计共5次测试,平均用时282.4 ms5陕西11月11日最高温度历史同期排名共5次测试,平均用时1 182 ms
图3 CIMISS系统和基于ES的气象大数据原型系统平均响应速度(ms)对比Fig.3 The Comparison of Average Response Speed (milliseconds) between CIMISS System and ES-based Meteorological Big Data Prototype System
使用气象大数据原型系统的RESTful接口,对“陕西省气象数据共享网”应用系统[12]进行了数据接入改造。优化后的数据共享网进行数据查询时,效率更高,此前较为卡顿的统计分析等模块响应速度明显增快,业务系统的用户体验得到了很大改进。
通过对最具代表性的中国地面逐小时观测资料相关应用场景的测试,表明基于ES的气象大数据原型系统在结构化数据的检索和统计方面,尤其是多并发访问的情况下,相比CIMISS数据服务接口,响应时间性能提升明显。但由于测试范围有限,还难以将该原型系统用于业务生产环境,未来可继续在以下两个方面展开研究:
①选取典型的非结构化数据,如雷达或卫星资料等,在大数据原型系统中存储,并选取应用场景进行性能优化测试;
②将ES开放接口和CIMISS数据服务接口直接对接,通过接口网关实现数据源跳转,在保证数据同步时效和对用户透明的前提下,实现原型系统到生产环境的平稳过渡。