李聰仁
摘要:GDELT每時(shí)每刻監(jiān)控著每個(gè)國(guó)家?guī)缀趺總€(gè)角落100多種語(yǔ)言的新聞媒體推動(dòng)全球的社會(huì)事件,GDELT為全球提供了一個(gè)自由開(kāi)放的計(jì)算平臺(tái),這也成為了分析地理信息的一個(gè)組成部分。針對(duì)大量實(shí)時(shí)更新的事件數(shù)據(jù),如何對(duì)事件數(shù)據(jù)進(jìn)行快速的存儲(chǔ)、檢索、可視化,提出了一種基于geomesa地理大數(shù)據(jù)框架分布式查詢(xún)與檢索方案。該方法首先采用Map-Reduce導(dǎo)入GDELT事件數(shù)據(jù),采用時(shí)空索引(Z3/XZ3)將事件數(shù)據(jù)沿著Z曲線(xiàn)存儲(chǔ)在Accumulo分布式數(shù)據(jù)庫(kù)中,通過(guò)leaflet或Geoserver顯示出來(lái),最后通過(guò)時(shí)空檢索將數(shù)據(jù)查找出來(lái)。并通過(guò)實(shí)驗(yàn)驗(yàn)證該方案的有效性。
關(guān)鍵詞: Geomesa; HBase; GSELT事件數(shù)據(jù);Spark; Accumulo
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)06-0006-03
1 引言
隨著全球事件的快速發(fā)展,每時(shí)每刻將產(chǎn)生大量的新聞事件數(shù)據(jù),GDELT以來(lái)自世界各地的100多種語(yǔ)言監(jiān)控印刷,廣播和網(wǎng)絡(luò)新聞媒體,以不斷更新地球上任何地方的突破性發(fā)展,每15分鐘更新一次。每個(gè)事件捕獲近60個(gè)屬性,包括識(shí)別人員、位置、組織、數(shù)量、主題、數(shù)據(jù)源、情緒、圖片等信息。GDELT將文章及言論解析成具備角色、來(lái)源及時(shí)空特性的事件,通過(guò)事件感知?jiǎng)酉?、挖掘關(guān)聯(lián)、預(yù)測(cè)態(tài)勢(shì)、洞悉世界[1]。面對(duì)這如此龐大的全球事件數(shù)據(jù),如何高效地存儲(chǔ)組織、管理分析、可視化,已成為現(xiàn)在迫切需要解決的問(wèn)題。
對(duì)于事件數(shù)據(jù),它屬于矢量數(shù)據(jù)中的點(diǎn)狀數(shù)據(jù),點(diǎn)狀數(shù)據(jù)中帶有時(shí)間序列,geomesa可以在Accumulo,HBase,Cassandra和Kafka中大規(guī)模存儲(chǔ),索引,查詢(xún)和轉(zhuǎn)換時(shí)空數(shù)據(jù),這將為存儲(chǔ)和管理事件數(shù)據(jù)提供了新的思路和解決方案。
方鵬[2]設(shè)計(jì)了海量海量媒體數(shù)據(jù)分析平臺(tái),它是基于Python的Django框架,采用的是MVC設(shè)計(jì)模式,應(yīng)用JQuery,Echart,CartoDB,百度地圖API等技術(shù)實(shí)現(xiàn)了各個(gè)功能模塊界面的可視化。范建永[3]設(shè)計(jì)了基于HBase的矢量空間數(shù)據(jù)存儲(chǔ)模型和一種基于MapReduce的并行構(gòu)建網(wǎng)格空間索引方法。祝若鑫[4]設(shè)計(jì)了基于Hadoop 的矢量數(shù)據(jù)并行管理方法,它采用了四叉樹(shù)層次剖分技術(shù)設(shè)計(jì)了多級(jí)格網(wǎng)索引對(duì)矢量數(shù)據(jù)進(jìn)行查詢(xún)檢索。韓驊宇[5]提出了針對(duì)整型時(shí)序數(shù)據(jù)的TSDAC算法。該算法通過(guò)直接取址編碼,實(shí)現(xiàn)了整型數(shù)據(jù)的變長(zhǎng)高效編碼壓縮和直接訪(fǎng)問(wèn),TSDAC算法還通過(guò)相異數(shù)存儲(chǔ)策略有效減少連續(xù)冗余數(shù)據(jù)的存儲(chǔ)。杜忠暉[6]利用Hadoop的并行計(jì)算框架Map Reduce進(jìn)行數(shù)據(jù)同構(gòu)化處理;在非結(jié)構(gòu)化文檔數(shù)據(jù)檢索優(yōu)化技術(shù)方面,利用Elastic Search特有的過(guò)濾器機(jī)制結(jié)合互聯(lián)網(wǎng)身份信息數(shù)據(jù)特點(diǎn),提出了基于過(guò)濾器的檢索過(guò)程優(yōu)化方法。章超[7]針對(duì)海量數(shù)據(jù)檢索延遲高,設(shè)計(jì)了自稱(chēng)為Solr分Core算法和時(shí)間緊縮算法,實(shí)現(xiàn)了千億數(shù)據(jù)秒級(jí)檢索,并設(shè)計(jì)了翻頁(yè)緩存功能提升客戶(hù)端翻頁(yè)體驗(yàn)。吳廣君、王樹(shù)鵬[8]采用集中分布式B+Tree索引和局部索引相結(jié)合的方法提高檢索效率.在此基礎(chǔ)上討論復(fù)雜查詢(xún)條件的任務(wù)分解機(jī)制,支持大數(shù)據(jù)的多屬性檢索、模糊檢索以及統(tǒng)計(jì)分析等查詢(xún)功能。
由上文可以看出,現(xiàn)有存儲(chǔ)模型大都針對(duì)矢量數(shù)據(jù)的非結(jié)構(gòu)化數(shù)據(jù),而實(shí)際不僅限于此,GDELT通常是海量的、實(shí)時(shí)更新的,對(duì)于大中型數(shù)據(jù)中心還需要對(duì)GDELT事件數(shù)據(jù)及矢量數(shù)據(jù)等數(shù)據(jù)進(jìn)行存儲(chǔ)和分發(fā)。另外,在分布式環(huán)境下,為了保證數(shù)據(jù)的快速存取并最大化地發(fā)揮分布式存儲(chǔ)的優(yōu)勢(shì),現(xiàn)有的模型不能很好地兼容時(shí)空數(shù)據(jù),對(duì)時(shí)空數(shù)據(jù)的檢索太慢,不能適應(yīng)大規(guī)模集群的高效存儲(chǔ)與檢索。
因此,本文采用GeoMesa地理數(shù)據(jù)框架對(duì)事件數(shù)據(jù)進(jìn)行查詢(xún)檢索,它兼容時(shí)序索引,它很好的存儲(chǔ)大量的點(diǎn)線(xiàn)面數(shù)據(jù),還可以通過(guò)流式處理,可以實(shí)現(xiàn)對(duì)事件數(shù)據(jù)的大規(guī)模存儲(chǔ)與分析。
2 GeoMesa簡(jiǎn)介
GeoMesa是一個(gè)開(kāi)源工具套件,可在分布式計(jì)算系統(tǒng)上進(jìn)行大規(guī)模地理空間查詢(xún)和分析。GeoMesa在Accumulo,HBase,Google Bigtable和Cassandra數(shù)據(jù)庫(kù)之上提供時(shí)空索引,用于大量存儲(chǔ)點(diǎn),線(xiàn)和多邊形數(shù)據(jù)。GeoMesa還通過(guò)在Apache Kafka之上分層空間語(yǔ)義來(lái)提供時(shí)空數(shù)據(jù)的近實(shí)時(shí)流處理。通過(guò)GeoServer,GeoMesa可以通過(guò)標(biāo)準(zhǔn)OGC(開(kāi)放地理空間聯(lián)盟)API和協(xié)議(如WFS和WMS)促進(jìn)與各種現(xiàn)有映射客戶(hù)端的集成。GeoMesa支持Apache Spark以進(jìn)行自定義分布式地理空間分析。
GeoMesa的GeoServer插件讓GeoServer可以處理使用GeoMesa表存儲(chǔ)的數(shù)據(jù)。該插件將與數(shù)據(jù)源關(guān)聯(lián)的GeoServer功能映射到GeoMesa格式化表,并提供了許多優(yōu)化以支持特定實(shí)例。為了展示地理空間數(shù)據(jù),GeoMesa實(shí)現(xiàn)了GeoTools接口,提供對(duì)Open Geospatial Consortium標(biāo)準(zhǔn)的HTTP訪(fǎng)問(wèn)。
GeoMesa索引的基本原理是用三維空間填充曲線(xiàn)表示經(jīng)度,緯度和時(shí)間的三個(gè)維度,使用沿該曲線(xiàn)的點(diǎn)的值作為關(guān)鍵。這使得它可以將記錄存儲(chǔ)在鍵值存儲(chǔ)中,其中的鍵表示我們最常用于查詢(xún)的三個(gè)數(shù)據(jù)維度。
GDELT事件數(shù)據(jù)是針對(duì)時(shí)空進(jìn)行索引的,它包括事件數(shù)據(jù)的點(diǎn)信息和日期信息,還包括不同ID信息、屬性信息。因?yàn)槭录?shù)據(jù)的ID號(hào)不容易編碼,屬性信息的種類(lèi)繁多,索引采用時(shí)空指數(shù)索引。
3 基于Geomesa的GDELT事件數(shù)據(jù)的存儲(chǔ)與展示
3.1 GDELT事件數(shù)據(jù)的導(dǎo)入
GeoMesa使用附帶的命令行工具,您可以啟動(dòng)map/reduce作業(yè),以便以最小的配置以分布式方式提取數(shù)據(jù)。該GDELT事件數(shù)據(jù)庫(kù)提供了全面的時(shí)間和廣播,打印報(bào)告的事件的位置索引歸檔,以及全球從1979年到今天的網(wǎng)絡(luò)新聞媒體。
多個(gè)框架可用于流式傳輸和批量導(dǎo)入數(shù)據(jù)。其中包括GeoMesa命令行工具,Apache Hadoop的map-reduce作業(yè)以及在Apache Storm上運(yùn)行的實(shí)時(shí)導(dǎo)入。
然后將下載的數(shù)據(jù)轉(zhuǎn)存到HDFS中,使用命令行工具啟動(dòng)讀取。由于目標(biāo)文件位于HDFS中,因此作業(yè)將自動(dòng)作為分布式map/reduce運(yùn)行。最后使用GeoMesa附帶的GDELT定義,通過(guò)名稱(chēng)調(diào)用它們。在下面檢查SimpleFeatureType和轉(zhuǎn)換器定義conf/sfts/gdelt/。將事件數(shù)據(jù)存儲(chǔ)到Hbase數(shù)據(jù)庫(kù)中。
3.2 GeoMesa索引構(gòu)建
SimpleFeatureType定義GeoTools模式,由一系列眾所周知的屬性組成。GeoMesa支持所有標(biāo)準(zhǔn)GeoTools屬性類(lèi)型,以及一些其他屬性類(lèi)型。SimpleFeatureType在GeoMesa中創(chuàng)建使用時(shí),請(qǐng)務(wù)必使用提供的類(lèi),而不是標(biāo)準(zhǔn)的GeoTools DataUtilities。SimpleFeatureType可以支持幾何類(lèi)型、容器類(lèi)型、列表類(lèi)型等數(shù)據(jù)類(lèi)型。
每一個(gè)Schema表示導(dǎo)入數(shù)據(jù)的樣式集合的解決方案,通過(guò)設(shè)置固定字段的屬性值來(lái)對(duì)應(yīng)的導(dǎo)入相應(yīng)的數(shù)據(jù),SimpleFeature就是導(dǎo)入數(shù)據(jù)類(lèi)型的框架,SimpleFeatureType必須在調(diào)用時(shí)設(shè)置靜態(tài)屬性,createSchema之后不能更改。大多數(shù)屬性都是通過(guò)用戶(hù)數(shù)據(jù)值控制的,可以SimpleFeatureType 是特定屬性,也可以是特定屬性。設(shè)置用戶(hù)數(shù)據(jù)可以通過(guò)多種方式完成。在圖3中,通過(guò)創(chuàng)建SimpleFeatureType,構(gòu)建相應(yīng)的屬性值及其類(lèi)型來(lái)創(chuàng)建Schema,檢索事件數(shù)據(jù)的最好方式是將日期作為關(guān)鍵字,能更好地反映事件數(shù)據(jù)的時(shí)序特征。對(duì)于包含日期屬性的模式,GeoMesa將使用該屬性作為主Z3 / XZ3索引的一部分。如果架構(gòu)包含多個(gè)日期屬性,則可以通過(guò)用戶(hù)數(shù)據(jù)鍵指定要使用的屬性geomesa.index.dtg。
3.3 GDELT數(shù)據(jù)存儲(chǔ)
GeoMesa支持多種可擴(kuò)展的基于云的數(shù)據(jù)存儲(chǔ)技術(shù),包括Apache Accumulo,Apache HBase和HDFS等,它們可以以編程的方式和GeoServer中存儲(chǔ)事件數(shù)據(jù)。
3.3.1以編程方式進(jìn)行事件數(shù)據(jù)存儲(chǔ)
假設(shè)GeoMesa代碼在類(lèi)路徑上,可以通過(guò)常規(guī)GeoTools發(fā)現(xiàn)方法獲取Accumulo數(shù)據(jù)存儲(chǔ)的實(shí)例,再通過(guò)配置不同的參數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。
3.3.2在GeoServer中對(duì)事件數(shù)據(jù)進(jìn)行存儲(chǔ)
對(duì)GeoMesa數(shù)據(jù)渲染,操作和管理存儲(chǔ)直接方法是使用GeoServer,它是一種用于共享地理空間數(shù)據(jù)的開(kāi)源服務(wù)器。GeoMesa實(shí)現(xiàn)了與 GeoTools兼容的數(shù)據(jù)存儲(chǔ)。這使得可以將GeoMesa Accumulo用作GeoServer中的數(shù)據(jù)存儲(chǔ)。將Geomesa模塊中的Accumulo部分的GeoServer插件分發(fā)到Geoserver中,就可以實(shí)現(xiàn)事件數(shù)據(jù)的存儲(chǔ)。
3.3.3使用Leaflet可視化快速啟動(dòng)數(shù)據(jù)
首先要安裝Geomesa_accumulo組件,使用Geomesa_accumulo命令行的export命令對(duì)事件數(shù)據(jù)進(jìn)行導(dǎo)出到leaflet地圖,選擇的數(shù)據(jù)目錄是Accumulo的命名空間下的數(shù)據(jù)表,使用Leadlet輸出類(lèi)型在地圖上顯示如圖4所示。
4 基于Geomesa的GDELT事件數(shù)據(jù)的快速檢索
對(duì)GDELT事件數(shù)據(jù)檢索主要針對(duì)事件數(shù)據(jù)的ID、事件數(shù)據(jù)發(fā)生的時(shí)間、事件數(shù)據(jù)的范圍。GeoMesa通過(guò)GeoTools查詢(xún)提示提供高級(jí)查詢(xún)功能??梢允褂眠@些提示來(lái)控制查詢(xún)處理的各個(gè)方面,或觸發(fā)分布式分析處理。將GeoTools Query轉(zhuǎn)換為特定后端的掃描和過(guò)濾器的過(guò)程。
本文采用了事件數(shù)據(jù)的ID、事件數(shù)據(jù)發(fā)生的時(shí)間、事件數(shù)據(jù)的范圍三者結(jié)合的事件檢索方式,首先必須確定時(shí)間的范圍和空間的范圍和具體的ID,對(duì)于范圍檢索,要建立一個(gè)經(jīng)緯度范圍的索引框,確定經(jīng)緯度具體的范圍;對(duì)于時(shí)間范圍,設(shè)置一個(gè)時(shí)間范圍的類(lèi)型,將時(shí)間范圍的值加入過(guò)濾器中進(jìn)行檢索。
5 實(shí)現(xiàn)結(jié)果分析對(duì)比
本實(shí)驗(yàn)采用了不同的分布式數(shù)據(jù)庫(kù)對(duì)GDELT事件數(shù)據(jù)進(jìn)行存儲(chǔ)。本文采用了GDELT事件數(shù)據(jù)的2018年10月15日的CSV數(shù)據(jù),通過(guò)導(dǎo)入到Accumulo、Hbase、Cassandra、HDFS不同的數(shù)據(jù)庫(kù)中進(jìn)行存儲(chǔ)檢索,對(duì)比一下事件數(shù)據(jù)不同的入庫(kù)效率,結(jié)果如下:
通過(guò)以上的數(shù)據(jù)結(jié)果,可以看出導(dǎo)入不同數(shù)據(jù)庫(kù)的時(shí)間效率,對(duì)于單條的事件數(shù)據(jù)而言,HDFS的入庫(kù)效率更高,HDFS主要是針對(duì)小文件存儲(chǔ),SQL性能更好,入庫(kù)時(shí)間最快,Cassandra數(shù)據(jù)庫(kù)類(lèi)似于HDFS,入庫(kù)效率次之,對(duì)于Accumulo和Hbase數(shù)據(jù)庫(kù),它們都具有強(qiáng)一致性的特點(diǎn),都是針對(duì)列式存儲(chǔ),所以它們的效率相差無(wú)幾。
本實(shí)驗(yàn)采用了不同的索引進(jìn)行對(duì)GDELT事件數(shù)據(jù)進(jìn)行檢索,因?yàn)槭录?shù)據(jù)是點(diǎn)狀數(shù)據(jù),索引不適用與XZ2和XZ3數(shù)據(jù)索引,因此只有四種索引方式進(jìn)行檢索,分別是Z2、Z3、ID和屬性方式,如表4所示:
由表4可以看出空間索引的索引時(shí)間比時(shí)空數(shù)據(jù)的速度要快,主要是因?yàn)榭臻g幾何和時(shí)間聯(lián)合查找,所費(fèi)時(shí)間要多,而對(duì)于ID和屬性數(shù)據(jù),它們是精確檢索,所費(fèi)時(shí)間要多,ID更快,因?yàn)镮D是唯一的。
通過(guò)以上試驗(yàn)可以看出,將GeoMesa應(yīng)用于GDELT事件數(shù)據(jù)的存儲(chǔ)與檢索,可以提高空間數(shù)據(jù)的存儲(chǔ)和管理效率,并可以通過(guò)擴(kuò)充節(jié)點(diǎn)獲得較大的存儲(chǔ)空間和較高的空間分析計(jì)算效率。
參考文獻(xiàn):
[1] http://www.gdelt.cn/homePage.html
[2] 方鵬. 基于Django的海量媒體數(shù)據(jù)分析平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 南寧: 廣西大學(xué), 2017.
[3] 范建永,龍明,熊偉. 基于HBase的矢量空間數(shù)據(jù)分布式存儲(chǔ)研究[J]. 地理與地理信息科學(xué), 2012, 28(5): 39-43.
[4] 祝若鑫. 云計(jì)算環(huán)境下的空間矢量數(shù)據(jù)存儲(chǔ)與管理[D]. 鄭州: 信息工程大學(xué), 2015.
[5] 韓驊宇. 時(shí)序數(shù)據(jù)的高效存儲(chǔ)與檢索[D]. 北京: 北京交通大學(xué), 2014.
[6] 杜忠暉. 非結(jié)構(gòu)化文檔數(shù)據(jù)一體化存儲(chǔ)檢索技術(shù)研究[D]. 哈爾濱: 哈爾濱工業(yè)大學(xué), 2015.
[7] 章超. 千億級(jí)智能交通大數(shù)據(jù)存儲(chǔ)與檢索系統(tǒng)的研究[D]. 杭州: 杭州電子科技大學(xué), 2017.
[8] 吳廣君、王樹(shù)鵬. 海量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)檢索系統(tǒng)[J]. 計(jì)算機(jī)研究與發(fā)展, 2012, 49(5): 1-5.
【通聯(lián)編輯:代影】