基于geomesa的GDELT事件数据的存储与检索方法研究

2019-05-22 10:27李聪仁
电脑知识与技术 2019年6期

李聪仁

摘要:GDELT每时每刻监控着每个国家几乎每个角落100多种语言的新闻媒体推动全球的社会事件,GDELT为全球提供了一个自由开放的计算平台,这也成为了分析地理信息的一个组成部分。针对大量实时更新的事件数据,如何对事件数据进行快速的存储、检索、可视化,提出了一种基于geomesa地理大数据框架分布式查询与检索方案。该方法首先采用Map-Reduce导入GDELT事件数据,采用时空索引(Z3/XZ3)将事件数据沿着Z曲线存储在Accumulo分布式数据库中,通过leaflet或Geoserver显示出来,最后通过时空检索将数据查找出来。并通过实验验证该方案的有效性。

关键词: Geomesa; HBase; GSELT事件数据;Spark; Accumulo

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)06-0006-03

1 引言

隨着全球事件的快速发展,每时每刻将产生大量的新闻事件数据,GDELT以来自世界各地的100多种语言监控印刷,广播和网络新闻媒体,以不断更新地球上任何地方的突破性发展,每15分钟更新一次。每个事件捕获近60个属性,包括识别人员、位置、组织、数量、主题、数据源、情绪、图片等信息。GDELT将文章及言论解析成具备角色、来源及时空特性的事件,通过事件感知动向、挖掘关联、预测态势、洞悉世界[1]。面对这如此庞大的全球事件数据,如何高效地存储组织、管理分析、可视化,已成为现在迫切需要解决的问题。

对于事件数据,它属于矢量数据中的点状数据,点状数据中带有时间序列,geomesa可以在Accumulo,HBase,Cassandra和Kafka中大规模存储,索引,查询和转换时空数据,这将为存储和管理事件数据提供了新的思路和解决方案。

方鹏[2]设计了海量海量媒体数据分析平台,它是基于Python的Django框架,采用的是MVC设计模式,应用JQuery,Echart,CartoDB,百度地图API等技术实现了各个功能模块界面的可视化。范建永[3]设计了基于HBase的矢量空间数据存储模型和一种基于MapReduce的并行构建网格空间索引方法。祝若鑫[4]设计了基于Hadoop 的矢量数据并行管理方法,它采用了四叉树层次剖分技术设计了多级格网索引对矢量数据进行查询检索。韩骅宇[5]提出了针对整型时序数据的TSDAC算法。该算法通过直接取址编码,实现了整型数据的变长高效编码压缩和直接访问,TSDAC算法还通过相异数存储策略有效减少连续冗余数据的存储。杜忠晖[6]利用Hadoop的并行计算框架Map Reduce进行数据同构化处理;在非结构化文档数据检索优化技术方面,利用Elastic Search特有的过滤器机制结合互联网身份信息数据特点,提出了基于过滤器的检索过程优化方法。章超[7]针对海量数据检索延迟高,设计了自称为Solr分Core算法和时间紧缩算法,实现了千亿数据秒级检索,并设计了翻页缓存功能提升客户端翻页体验。吴广君、王树鹏[8]采用集中分布式B+Tree索引和局部索引相结合的方法提高检索效率.在此基础上讨论复杂查询条件的任务分解机制,支持大数据的多属性检索、模糊检索以及统计分析等查询功能。

由上文可以看出,现有存储模型大都针对矢量数据的非结构化数据,而实际不仅限于此,GDELT通常是海量的、实时更新的,对于大中型数据中心还需要对GDELT事件数据及矢量数据等数据进行存储和分发。另外,在分布式环境下,为了保证数据的快速存取并最大化地发挥分布式存储的优势,现有的模型不能很好地兼容时空数据,对时空数据的检索太慢,不能适应大规模集群的高效存储与检索。

因此,本文采用GeoMesa地理数据框架对事件数据进行查询检索,它兼容时序索引,它很好的存储大量的点线面数据,还可以通过流式处理,可以实现对事件数据的大规模存储与分析。

2 GeoMesa简介

GeoMesa是一个开源工具套件,可在分布式计算系统上进行大规模地理空间查询和分析。GeoMesa在Accumulo,HBase,Google Bigtable和Cassandra数据库之上提供时空索引,用于大量存储点,线和多边形数据。GeoMesa还通过在Apache Kafka之上分层空间语义来提供时空数据的近实时流处理。通过GeoServer,GeoMesa可以通过标准OGC(开放地理空间联盟)API和协议(如WFS和WMS)促进与各种现有映射客户端的集成。GeoMesa支持Apache Spark以进行自定义分布式地理空间分析。

GeoMesa的GeoServer插件让GeoServer可以处理使用GeoMesa表存储的数据。该插件将与数据源关联的GeoServer功能映射到GeoMesa格式化表,并提供了许多优化以支持特定实例。为了展示地理空间数据,GeoMesa实现了GeoTools接口,提供对Open Geospatial Consortium标准的HTTP访问。

GeoMesa索引的基本原理是用三维空间填充曲线表示经度,纬度和时间的三个维度,使用沿该曲线的点的值作为关键。这使得它可以将记录存储在键值存储中,其中的键表示我们最常用于查询的三个数据维度。

GDELT事件数据是针对时空进行索引的,它包括事件数据的点信息和日期信息,还包括不同ID信息、属性信息。因为事件数据的ID号不容易编码,属性信息的种类繁多,索引采用时空指数索引。

3 基于Geomesa的GDELT事件数据的存储与展示

3.1 GDELT事件数据的导入

GeoMesa使用附带的命令行工具,您可以启动map/reduce作业,以便以最小的配置以分布式方式提取数据。该GDELT事件数据库提供了全面的时间和广播,打印报告的事件的位置索引归档,以及全球从1979年到今天的网络新闻媒体。

多个框架可用于流式传输和批量导入数据。其中包括GeoMesa命令行工具,Apache Hadoop的map-reduce作业以及在Apache Storm上运行的实时导入。

然后将下载的数据转存到HDFS中,使用命令行工具启动读取。由于目标文件位于HDFS中,因此作业将自动作为分布式map/reduce运行。最后使用GeoMesa附带的GDELT定义,通过名称调用它们。在下面检查SimpleFeatureType和转换器定义conf/sfts/gdelt/。将事件数据存储到Hbase数据库中。

3.2 GeoMesa索引构建

SimpleFeatureType定义GeoTools模式,由一系列众所周知的属性组成。GeoMesa支持所有标准GeoTools属性类型,以及一些其他属性类型。SimpleFeatureType在GeoMesa中创建使用时,请务必使用提供的类,而不是标准的GeoTools DataUtilities。SimpleFeatureType可以支持几何类型、容器类型、列表类型等数据类型。

每一个Schema表示导入数据的样式集合的解决方案,通过设置固定字段的属性值来对应的导入相应的数据,SimpleFeature就是导入数据类型的框架,SimpleFeatureType必须在调用时设置静态属性,createSchema之后不能更改。大多数属性都是通过用户数据值控制的,可以SimpleFeatureType 是特定属性,也可以是特定属性。设置用户数据可以通过多种方式完成。在图3中,通过创建SimpleFeatureType,构建相应的属性值及其类型来创建Schema,检索事件数据的最好方式是将日期作为关键字,能更好地反映事件数据的时序特征。对于包含日期属性的模式,GeoMesa将使用该属性作为主Z3 / XZ3索引的一部分。如果架构包含多个日期属性,则可以通过用户数据键指定要使用的属性geomesa.index.dtg。

3.3 GDELT数据存储

GeoMesa支持多种可扩展的基于云的数据存储技术,包括Apache Accumulo,Apache HBase和HDFS等,它们可以以编程的方式和GeoServer中存储事件数据。

3.3.1以编程方式进行事件数据存储

假设GeoMesa代码在类路径上,可以通过常规GeoTools发现方法获取Accumulo数据存储的实例,再通过配置不同的参数来实现数据的存储。

3.3.2在GeoServer中对事件数据进行存储

对GeoMesa数据渲染,操作和管理存储直接方法是使用GeoServer,它是一种用于共享地理空间数据的开源服务器。GeoMesa实现了与 GeoTools兼容的数据存储。这使得可以将GeoMesa Accumulo用作GeoServer中的数据存储。将Geomesa模块中的Accumulo部分的GeoServer插件分发到Geoserver中,就可以实现事件数据的存储。

3.3.3使用Leaflet可视化快速启动数据

首先要安装Geomesa_accumulo组件,使用Geomesa_accumulo命令行的export命令对事件数据进行导出到leaflet地图,选择的数据目录是Accumulo的命名空间下的数据表,使用Leadlet输出类型在地图上显示如图4所示。

4 基于Geomesa的GDELT事件数据的快速检索

对GDELT事件数据检索主要针对事件数据的ID、事件数据发生的时间、事件数据的范围。GeoMesa通过GeoTools查询提示提供高级查询功能。可以使用这些提示来控制查询处理的各个方面,或触发分布式分析处理。将GeoTools Query转换为特定后端的扫描和过滤器的过程。

本文采用了事件数据的ID、事件数据发生的时间、事件数据的范围三者结合的事件检索方式,首先必须确定时间的范围和空间的范围和具体的ID,对于范围检索,要建立一个经纬度范围的索引框,确定经纬度具体的范围;对于时间范围,设置一个时间范围的类型,将时间范围的值加入过滤器中进行检索。

5 实现结果分析对比

本实验采用了不同的分布式数据库对GDELT事件数据进行存储。本文采用了GDELT事件数据的2018年10月15日的CSV数据,通过导入到Accumulo、Hbase、Cassandra、HDFS不同的数据库中进行存储检索,对比一下事件数据不同的入库效率,结果如下:

通过以上的数据结果,可以看出导入不同数据库的时间效率,对于单条的事件数据而言,HDFS的入库效率更高,HDFS主要是针对小文件存储,SQL性能更好,入库时间最快,Cassandra数据库类似于HDFS,入库效率次之,对于Accumulo和Hbase数据库,它们都具有强一致性的特点,都是针对列式存储,所以它们的效率相差无几。

本实验采用了不同的索引进行对GDELT事件数据进行检索,因为事件数据是点状数据,索引不适用与XZ2和XZ3数据索引,因此只有四种索引方式进行检索,分别是Z2、Z3、ID和属性方式,如表4所示:

由表4可以看出空间索引的索引时间比时空数据的速度要快,主要是因为空间几何和时间联合查找,所费时间要多,而对于ID和属性数据,它们是精确检索,所费时间要多,ID更快,因为ID是唯一的。

通过以上试验可以看出,将GeoMesa应用于GDELT事件数据的存储与检索,可以提高空间数据的存储和管理效率,并可以通过扩充节点获得较大的存储空间和较高的空间分析计算效率。

参考文献:

[1] http://www.gdelt.cn/homePage.html

[2] 方鹏. 基于Django的海量媒体数据分析平台的设计与实现[D]. 南宁: 广西大学, 2017.

[3] 范建永,龙明,熊伟. 基于HBase的矢量空间数据分布式存储研究[J]. 地理与地理信息科学, 2012, 28(5): 39-43.

[4] 祝若鑫. 云计算环境下的空间矢量数据存储与管理[D]. 郑州: 信息工程大学, 2015.

[5] 韩骅宇. 时序数据的高效存储与检索[D]. 北京: 北京交通大学, 2014.

[6] 杜忠晖. 非结构化文档数据一体化存储检索技术研究[D]. 哈尔滨: 哈尔滨工业大学, 2015.

[7] 章超. 千亿级智能交通大数据存储与检索系统的研究[D]. 杭州: 杭州电子科技大学, 2017.

[8] 吴广君、王树鹏. 海量结构化数据存储检索系统[J]. 计算机研究與发展, 2012, 49(5): 1-5.

【通联编辑:代影】