基于Hadoop+Jstorm+zookeeper的自然灾害气象数据仓库构建技术研究
2017-09-22丁薇谭向宇彭晶黄绪勇聂鼎程旭明胡勇
丁薇+谭向宇+彭晶+黄绪勇+聂鼎+程旭明+胡勇
随着科学技术的不断提高,人们不只是依靠传统的气象监测方式,而是不断的进行科技革新,监测的方式越加丰富起来。而问题也随之而来,气象数据涉及的方面广阔,数据多维化,结构化和非结构化数据成上升趋势,使得气象数据的存储面临难题。
将数据库技术应用于包含海量数据的气象数据上,虽然可以大大提高数据检索能力和服务效率,但是对于海量数据分析是远远不够的,其涉及到的数据是多维化的,想要从这些看似简单,实际却很复杂的数据中分析有用数据是很困难的。
而数据仓库的出现可以很好的解决气象数据的数据量巨大,且数据多维化的问题。
1 气象数据仓库
1.1 体系结构
本文的数据仓库的建立是基于Hadoop+Jstorm+zookeeper三者的结合构建的分布式计算环境上的,最终数据存放于Hbase中,使用Map Reduce对电力大数据进行分布式计算和处理。高效快速的对实时数据处理反馈,海量数据存储。
同时将各个监测设备终端和监测属性点存放于Oracle数据库中。各个设备终端之间的关系如下:一台设备上可以挂载多个监测终端于其上,一个监测终端又按监测的种类不同分为多个监测主题实例,每个主题实例对应这一个监测类型(县级站点气象实时数据、乡镇站点气象实时数据等),每一种监测类型下有对应这多个监测属性(雨量、实时温度、湿度等)。
将采集到的实时数据存放于Hbase,非实时数据存放于Oracle,两者即互不相干,有密不可分。Hbase数据的写入,依赖于实时数据和非实时数据。
1.2 数据来源
本次研究的数据仓库技术的数据来源是从地方局中调取的数据,其以文件格式存储于远程ftp服务器上。故数据要想进入到Hbase中,需要程序解析后塞入消息队列中,然后在存至Hbase。
为了预测的准确和详细,需要进行多个天气指标值:温度(℃)、雨量(mm)、风速(m/s)、风向、气压等,还要根据气象卫星传递回来的数据进行分析整合。
在数据存放Hbase前,设计合理的rowkey可以大大的提高数据的检索能力,提高Hadoop集群的性能。
本此研究同样设计了一套简单而有效的rowkey策略:以主题实例+监测属性+采集时间三者拼接组合成rowkey。这样设计的原因是:1)主题实例是唯一存在的,一个主题只对应着一个终端,而一个终端也只对应着一个设备,以主题实例为首,就能确定属性的唯一;2)主题与类型是多对一的关系,一个主题对应着一个类型;而类型与属性是是一对多的关系,这样设计就能知道,是哪个主题下那个属性的监测信息了;3)采集时间,因为数据采集是分时间段的,每隔一段时间就要进行数据的采集,为确保数据的实时性,所以添加了采集时间。这样就确保了监测终端在某个时间点采集到了某个监测属性的值。
图2即是rowkey的最终效果展示:由图可以知道:主题实例10000000000001790977在2016年11月4日6时30分的时候的10076属性(天气情况)为小雨,而在8时53分为阵雨。通过主题实例亦可以反向拿到监测终端为:“10*10气象网格19176”。
數据从不同的监测系统中到来,经过解析后,按照固定的格式存储,既保证了数据的规范化处理,又能达到数据因果查询效果。拿到一个设备可以通过设备与监测终端的关系获取到终端信息,再以终端和主题实例的关系获取到主题实例信息,然后再以主题实例与实例类别,就能抽取到主题的监测属性信息,最后就可以根据这些信息,去查询指定时间采集到的数据值了:get ‘THEME_PARAM_VAUE,100000000000016833731009920160706000000。或者查询一天之内采集到的所有数据值:scan ‘THEME_PARAM_VALUE,{STARTROW=>1000000000016833731009920160706074800,STOPROW=>000000000016833731009920160707000000}。
2 流数据的处理
气象数据也是一种流式数据,监测设备按照一定的频率,长期的采集监测点的数据,通过网络实时的提交给服务器。所以可以把它看作一种流数据。
针对于流数据,我们在建设分布式计算环境的时候就已经接入Jstorm流式计算框架。它能够简单可靠的处理实时的数据流,采用批处理方式实时处理,在极端时间内得到结果反馈。
外部流式数据流入Spout中,然后将数据以tuple作为基本单元传递给Bolt处理单元,然后再将经过处理后的数据到下一个处理单元对数据加工处理,直到最后一个处理单元处理完成,才能算完成一次Topology,在这个处理和传递数据的过程中,走的都是批处理方式,高效快速的对流数据进行计算处理,达到实时的反馈[1]。
气象数据的后期利用也是很大的,虽然上一刻的天气已经处于过去时了,但是其依然还有利用价值,比如:气象预测的时候,你得有一个事物作为参照,才能根据公式、程序得出想要的结果。
所以对于气象数据的存储,不管是过去,还是现在的数据都非常重要,不能轻易的做删除操作,而在Hbase中如果数据列有问题,可以通过rowkey更新覆盖,这有一个好处:Hbase会自动记录版本号,旧的版本不是物理上的删除,而是不直接显示,每次只显示最新版本的数据。
3 结论
以上就是对气象数据仓库在数据存储方面的研究,建立合理的rowkey策略,保证数据的唯一性、可使用性,以简单的方式存储具有重要价值的数据。使用Jstorm对气象数据进行处理和存储,极大的提高了数据处理能力,无限的接近于实时反馈。
参考文献
[1]杨鹏.面向流式数据处理平台JStorm的负载均衡技术研究[J].北京:北京工业大学,2016.endprint