MAP-减少GDELT的摄取¶
GeoMesa让您可以轻松开始使用大数据。使用附带的命令行工具,您可以启动map/Reduce作业,以分布式方式获取数据,只需最少的配置。这是一个更高级的教程;您应该已经熟悉了GeoMesa和Geoserver的基础知识。如果您还没有,请花点时间来浏览其中一个快速入门教程。
本教程介绍如何执行以下操作:
利用GeoMesa命令行工具 GDELT 通过Hadoop映射/还原作业将数据文件放入GeoMesa
利用Geoserver查询和可视化数据
先决条件¶
在开始之前,您必须具备以下条件:
备份存储的选择¶
本教程将使用几个不同的后端。为简单起见,本教程的其余部分将假定使用HBase。或者,您也可以使用Acumulo或(对于最简单的使用情形)GeoMesa文件系统数据存储区来直接摄取HDFS。如果不使用HBase,本教程其余部分中的命令将略有不同。
安装GeoMesa工具¶
按照相应后端下的说明安装命令行工具:
获取GDELT数据¶
这个 GDELT Event database 提供从1979年至今全球广播、印刷和网络新闻媒体报道的事件的全面的按时间和地点索引的存档。
GDELT有两种不同的数据格式,原始的1.0和新的2.0。GeoMesa支持这两种格式,具有命名的简单要素类型 gdelt
和 gdelt2
,分别为。本教程将使用GDELT 2.0。
您可以在https://blog.gdeltproject.org/gdelt-2-0-our-global-world-in-realtime/.下载原始的GDELT数据文件文件每15分钟写入一次。例如,以下Bash命令使用 wget
要下载2018年1月的所有活动文件:
$ mkdir gdelt && cd gdelt
$ for day in {01..31}; do
mkdir 201801$day && cd 201801$day;
for hour in {00..23}; do
for minute in 00 15 30 45; do
wget "http://data.gdeltproject.org/gdeltv2/201801${day}${hour}${minute}00.export.CSV.zip"
done
done
done
接下来,我们需要将文件转储到HDFS hadoop
指挥部。例如,以下命令将2018年1月的所有文件解压并连接到HDFS中:
$ for day in {01..31}; do
ls 201801$day/*.zip | xargs -n 1 zcat | hadoop fs -put - /gdelt/uncompressed/201801${day}.tsv
done
注意:单独的文件在解压缩时具有 *.csv
extensions, but the data contained within them are tab-separated values, hence the *.tsv
extension. See the GDELT raw data file documentation 有关这些文件格式的详细信息,请参阅。
正在运行摄取¶
使用命令行工具启动接收。由于目标文件位于HDFS中,因此该作业将自动作为分布式映射/还原运行。我们通过按名称调用GeoMesa附带的GDELT定义来使用它们。您可以查看 SimpleFeatureType
和下面的转换器定义 conf/sfts/gdelt/
。
$ bin/geomesa-hbase ingest \
--catalog <table> \
--feature-name gdelt \
--converter gdelt2 \
--spec gdelt2 \
"hdfs://host:port/gdelt/uncompressed/*"
替换 <table>
使用您希望摄取的目录表,并为您的HDFS实例使用正确的主机和端口。确保引用HDFS路径以防止Shell扩展 *
。
您应该会看到以下输出:
INFO Creating schema 'gdelt'
INFO Running ingestion in distributed mode
INFO Submitting job - please wait...
INFO Tracking available at https://namenode/proxy/application_xxxxxxx/
[============================================================] 100% complete xxxxxx ingested 0 failed in 00:00:45
INFO Distributed ingestion complete in 00:00:45
INFO Ingested xxxxxx features with no failures.
您可以通过使用以下工具查询数据来验证数据是否成功获取:
$ bin/geomesa-hbase export \
--feature-name gdelt \
--catalog <table> \
--max-features 10
您应该会看到返回了10条记录。
分析¶
Geoserver设置¶
按照相应后端下的说明安装Geoserver插件:
将GeoMesa数据存储区注册到Geoserver¶
添加指向您获取的数据的新GeoMesa存储,并发布 gdelt
一层。如果您不熟悉如何注册存储和发布层,请参考后端的相关快速入门。
查询¶
我们来看看美国东部的情况。默认的层预览将返回您接收的所有数据。由于这可能需要一些时间,因此可以使用 cql_filter
查询参数。根据您获取数据的日期,在下面的层预览URL中调整时间范围。URL假定Geoserver工作区名为“geomesa”--如果您使用不同的内容,请调整URL。
http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=geomesa:gdelt&styles=&bbox=-85.3,35.4,-68.5,43.7&width=1200&height=600&srs=EPSG:4326&format=application/openlayers&cql_filter=dtg%20DURING%202018-01-01T00:00:00.000Z/2018-01-31T23:59:59.999Z

显示2018年1月的所有GDELT活动¶
上面的地图正在使用 Stamen Watercolor 作为基层。有关将多个图层添加到一个组中的更多信息,请参阅 GeoServer documentation 。
滤器¶
让我们缩小我们的结果。GDELT将事件标记为 CAMEO (Conflict and Mediation Event Observations) 密码。“Threat”类型事件的客串代码以“13”开头。我们可以使用Geoserver的OpenLayers预览中的下拉列表来过滤这些事件:

打开Geoserver切换选项工具栏¶

在工具栏中输入CQL筛选器¶
让我们使用自定义图标来显示威胁事件,方法是添加一个 SLD style 到了这一层。添加SLD文件 threat.sld
转到Geoserver,进入左侧菜单上的“Styles”,然后选择“Add New Style”。SLD引用来自的图标 EmojiOne 。下载表情符号并重命名 1f525.png
至 fire.png
,然后将文件复制到您的Geoserver Servlet中,以便可以在http://localhost:8080/icons/fire.png.上使用它
现在我们通过添加以下内容来修改层预览 threat
发送到 styles
参数:
http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=geomesa:gdelt&CQL_FILTER=EventRootCode=13&styles=threat&bbox=-85.3,35.4,-68.5,43.7&width=1200&height=600&srs=EPSG:4326&format=application/openlayers

显示带有客串根代码威胁的GDELT事件¶
热图¶
您可以使用热图更清晰地显示同一位置的多个事件,或一般的大容量数据。
备注
热点图样式要求在您的Geoserver中安装Geoserver WPS插件,如中所述 GeoMesa过程 。
添加SLD文件 heatmap.sld
致Geoserver。
在下面的请求中,GDELT层被引用了两次,一次使用热图样式,一次使用威胁样式。热图层在Points层之前定义,因此这些点将被覆盖而不是隐藏。请注意 &env=radiusPixels:30
在URL中;这是SLD变量替换,并将替换在SLD中分配的默认值。
http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=geomesa:gdelt,geomesa:gdelt&CQL_FILTER=EventRootCode=13;EventRootCode=13&styles=heatmap,threat&bbox=-85.3,35.4,-68.5,43.7&width=1200&height=600&srs=EPSG:4326&format=application/openlayers&env=radiusPixels:30

显示带有GDELT事件和客串根代码威胁的事件覆盖的热图¶