Storm流式技术在地面气象数据处理中的应用
2019-10-30廖婷婷肖卫青李从英
廖婷婷,王 彪,肖卫青,李从英,郭 茜
(1.贵州省气象信息中心,贵州 贵阳 550002;2.国家气象信息中心,北京 100081)
0 引言
气象观测数据采集于各类气象仪器,通过各级别的气象业务工作人员通过气象业务标准观测得来[1]。地面自动气象站经过多年的建设,目前已经建成2 000多个国家级自动站,5万多个省级的区域自动站,用来传输全国的气温、气压、雨量、蒸发、风速风向等基本气象要素资料[2-3]。其中国家级自动站传输地面分钟和小时数据,且不同于过去的TXT传输方式,未来趋向于使用BUFR消息传输,分钟资料从现在的5 min发展到1 min采集,区域站的数量也会有翻倍式的增长。在这样的发展背景下,资料在解码入库处理过程中的稳定性、及时性、拓展性方面有了更多的要求。采用“云计算”方式进行分布式实时大数据处理是解决的方法之一,其中Apache Storm是一个开源的分布式实时计算系统,可以简单可靠地处理大量数据流,具有高容错性和处理速度,在一个小的 Storm 集群中,每个节点可以达到每秒数以百万计来处理消息的速度[4]。本文使用Storm分布式框架实现了地面气象数据实时解码入库处理程序,相对于传统的简约流程各方面性能有了显著提高。
1 数据和方法
本文系统部署于国家气象信息中心实时的地面气象站观测数据,其中以rabbit MQ消息格式传输的国家站小时数据1 600站/h,国家站分钟数据1 600条/5 min,以文件格式传输的国家站2 400站/h,区域站和雨量站58 500站/h。本文立足于信息中心原有的业务解码入库软件基础上,制定标准的数据解码规范,建立统一的可扩展的数据解码集和分布式快速入库框架,将解码功能和入库功能解耦,通过对不同格式资料的解码进行API封装以及不同数据库类型入库接口的封装,实现对资料类型和数据库类型的独立扩展。
本文采用Storm分布式实时计算系统框架下进行数据解码入库,并实时将监控消息发送至气象综合业务实时监控系统(天境)[5],Storm部署采用了多台服务器,设置了主节点(Master)和工作节点(Worker)。主节点运行了Nimbus程序,负责发送代码到Storm集群、分配工作任务给节点,并使用Zookeeper程序记录分配情况。工作节点运行了状态监控程序(Supervisior程序),负责监听Nimbus分配的任务[6]。当一个任务被提交给主节点,Nimbus对其进行校验和工作量计算(计算Task数量),进而给工作节点的处理过程程序(Spout/Bolt)设定相应的Task数量,记录到Zookeeper当中。
将Storm技术结合到解码入库系统,由主节点负责任务分配,工作节点负责消息监听与传递、解码入库处理、进程状态通知这几项重要功能。主节点收到MQ消息之后,将消息发给消息传递程序(Spout程序)传递给某个工作节点,工作节点的Supervisior监听到主节点发来的Spout消息内容之后,获取气象解码消息(包含资料名称、四级编码、气象数据等),然后传输给不同的处理程序(Bolt程序)进行处理。如图1所示,在工作节点监听到一个个Spout任务后,将任务交给某个Bolt-解码进行处理;Bolt-解码的LIST实体类得到该MQ消息体内各个要素的值,或者该文件内各个要素的值,然后再将这些要素值重新进行组合输出给Bolt-入库进行入库操作;在整个过程中,Bolt-DIEI负责发送EIDI信息给综合监控接口,为天镜报告解码入库的实时状态。可通过配置调整服务器上Spout和bolt的数量及分布,按需分配资源执行工作。
图1 Storm解码入库流程图Fig.1 Storm decoding and warehousing flow chart
由于地面资料类型不同,他们的数据库表结构也不同,在Bolt-入库操作过程中需要根据资料类型来启动相应的入库程序。如图2所示,Spout程序将消息传输给Bolt解码程序,解码完成后根据消息的格式和地面数据的类型(地面分钟BUFR资料、地面小时BUFR资料、报文类型资料),判断其为分钟Tuple、小时Tuple、报文Tuple,并将Tuple作为数据进行发射,发射给3类分别处理不同种类的Bolt入库函数:Bolt-分钟数据入库、Bolt-小时数据入库、Bolt-报文数据入库进行处理。
2 性能分析
2.1 省级入库时效对比
采用贵州省的地面气象站观测数据,分别利用Storm解码入库和简约流程入库[7]的入库时效进行对比,采用的数据包括BUFR格式国家站小时数据、BUFR格式国家站分钟数据,以及文本格式下的国家站、区域站、雨量站数据,采用的服务器为3台linux集群,每台的处理器为2.6 GHz/8cores,最多每台支持16线程数。Storm解码入库的数据库为MySQL,简约流程为Oracle数据库。
图2 Bolt-入库程序流程图Fig.2 Bolt-warehouse program flow chart
Storm集群配置了3个Worker、6个Spout、18个Bolt,对应Bolt-解码、Bolt-DIEI、Bolt-入库程序。简约流程分别由BUFR分钟解码入库、BUFR小时解码入库、报文解码入库3个入库进程进行处理。可以看出Storm时效均比简约流程提高5倍以上。
表1 Storm程序与简约流程时效对比Tab.1 Time Efficiency Comparison between Storm Program and Simple Process
2.2 大数据量下时效
在国家气象信息中心的3台Storm集群中,用Storm实现了文件格式的国家站、区域站、雨量站等近6万自动站数据的实时解码。实现了CTS2上传的国家站rabbit MQ消息解码,截止测试时间为止,Storm连续运行了138 d,相比简约流程时效同样提高了5倍以上。
表2 在大数据量下的Storm处理时效Tab.2 The Processing Aging of Storm Program in Big Data
2.3 非功能性对比
在非功能性性能方面,Storm采用多项技术达到地面观测数据入库的要求,时效性上需要达到所有该时次站点在1 min内入库的要求,可靠性和稳定性上要达到每条数据准确入库、记载错误、及时处理的流程,可拓展性上达到方便的应对业务及数据库的分布式拓展,可灵活调整入库配置。在这方面,采用Storm的技术可以进行实现。Storm的实现方式及与简约流程的实现方式见表3。
表3 Storm程序与简约流程的非功能性对比Tab.3 Non-functional comparison between Storm Program and Simple Process
3 小结
随着社会生活的丰富,人们对气象与环境的关注度越来越高,在气象行业内部,海量气象数据的存储共享与应用显得越来越重要,用户对气象数据访问的实时性、高效性要求也越来越高。本文通过对Storm解码入库进行理论设计与应用,并与简约流程进行对比,进一步验证了Storm解码入库的处理性能。
①采用Storm分布式框架,使用Spout节点连接外部数据源,将数据转化为Tuple,传递给解码Bolt、入库Bolt和DI/EI消息Bolt,分别进行实时的入库和监控,提高了入库性能。
②优化解码入库的处理流程,将解码和入库解耦。当某一过程出现故障的情况下,可以进行灵活切换,切换的节点可以从消息源头(Spout)、处理进程(Bolt)来进行,且每个节点故障后能自动重启,减少运维压力和入库迟钝。
③实际应用的效果显示,Storm解码入库流程比简约流程普遍时效提高了5倍以上,稳定性大有提高,这与Storm主要采用MySQL数据库有一定关系,探讨在不同数据库下的Storm入库性能优化也是未来的一个方向。