GeoMesa NiFi快速入门¶
本教程提供了使用带有NiFi的GeoMesa的示例实现。本演练将指导您设置将GDELT文件摄取到GeoMesa所需的组件。
先决条件¶
本教程使用 Docker ,并假定为Linux操作系统。
关于本教程¶
这种快速入门的操作方式是从本地文件系统读取CSV文件,并使用PutGeoMesa处理器将它们写入到GeoMesa Parquet文件。
下载GeoMesa NiFi Nars¶
首先,我们将下载相应的NAR。有关完整的说明,请参阅 安装 ,但此处转载了相关部分。在本教程中,我们将使用三个NAR:
geomesa-datastore-services-nar
geomesa-datastore-services-api-nar
geomesa-fs-nar
本教程将使用GeoMesa文件系统数据存储来避免外部依赖,但可以使用任何其他后端存储,方法是更改 DataStoreService
使用。
首先,设置要使用的版本:
export TAG="4.0.2" export VERSION="2.12-${TAG}" # note: 2.12 is the Scala build version
mkdir -p ~/gm-nifi-quickstart/extensions
cd ~/gm-nifi-quickstart
export NARS="geomesa-fs-nar geomesa-datastore-services-api-nar geomesa-datastore-services-nar"
for nar in $NARS; do wget -O "extensions/$nar_$VERSION.nar" "https://github.com/geomesa/geomesa-nifi/releases/download/geomesa-nifi-$TAG/$nar_$VERSION.nar"; done
获取GDELT数据¶
这个 GDELT Event database 提供从1979年至今全球广播、印刷和网络新闻媒体报道的事件的全面的按时间和地点索引的存档。GeoMesa具有解析GDELT数据的能力,因此对于本教程来说,它是一种很好的数据格式。有关更多详细信息,请参阅 全球事件、语言和语调数据库(GDELT) 。
运行以下命令下载最新的GDELT文件:
cd ~/gm-nifi-quickstart
mkdir gdelt
export GDELT_URL="$(wget -O - 'http://data.gdeltproject.org/gdeltv2/masterfilelist.txt' | head -n 1 | awk '{ print $3 }')"
wget "$GDELT_URL" -O "gdelt/$(basename $GDELT_URL)"
unzip -d gdelt gdelt/*.zip
rm gdelt/*.zip
与Docker一起运行NiFi¶
接下来,我们将通过Docker运行NiFi,挂载到我们的NAR中,并创建一个写出数据的目录:
cd ~/gm-nifi-quickstart
mkdir fs
docker run --rm \
-p 8443:8443
-e SINGLE_USER_CREDENTIALS_USERNAME=nifi \
-e SINGLE_USER_CREDENTIALS_PASSWORD=nifipassword \
-v "$(pwd)/extensions:/opt/nifi/nifi-current/extensions:ro" \
-v "$(pwd)/fs:/fs:rw" \
-v "$(pwd)/gdelt:/gdelt:ro" \
apache/nifi:1.19.1
一旦NiFi完成启动,它将在以下位置提供 https://localhost:8443/nifi
. You will likely have to click through a certificate warning due to the default self-signed cert being used. Once in the NiFi UI, you can log in with the credentials we specified in the run command; i.e. nifi
/nifipassword
。
创建NiFi流¶
如果您不熟悉NiFi,请参考 Getting Started 熟悉自己的指南。本教程的其余部分假定您对NiFi有基本的了解。
通过将新的处理器拖到您的流中,并选择 PutGeoMesa
。选择处理器并单击“配置”按钮对其进行配置。在属性选项卡上,选择 DataStoreService
并点击“创建新服务”。应该只有一个选项,即 FileSystemDataStoreService
,所以点击“创建”按钮。下一步,单击 FileSystemDataStoreService
输入,并在提示保存更改时选择“是”。这应该会将您带到控制器服务屏幕。点击小齿轮旁边的 FileSystemDataStoreService
来配置它。在属性选项卡上,输入以下配置:
fs.path
-/fs
fs.encoding
-parquet

点击[应用],该服务应显示为[正在验证]。点击屏幕左下角的“刷新”按钮,该服务应显示为“已禁用”。点击配置档位旁边的小闪电,点击“启用”按钮将其启用。启用后,关闭该对话框,然后通过单击 X
在右上角。这应该会把你带回主流。
现在,我们将再添加两个处理器来读取GDELT数据。首先,添加一个 ListFile
处理器,并配置 Input Directory
成为 /gdelt
(我们装载的GDELT数据的位置)。接下来,添加一个 FetchFile
处理器,并将 ListFile
为它干杯。
现在,我们将创建一个流程来设置GeoMesa获取数据所需的属性。添加一个 UpdateAttribute
处理器,并使用 +
按钮以添加四个动态属性:
geomesa.converter
-gdelt2
geomesa.sft.name
-gdelt
geomesa.sft.spec
-gdelt2
geomesa.sft.user-data
-geomesa.fs.scheme={"name":"daily","options":{"dtg-attribute":"dtg"}}

前三个属性定义输入数据的格式。最后一个属性由GeoMesa文件系统数据存储用于对磁盘上的数据进行分区。看见 分区方案 以获取更多信息。
接下来,将 FetchFile
处理器连接到 UpdateAttribute
处理器,以及 UpdateAttribute
处理器连接到 PutGeoMesa
处理器。自动终止任何其他仍未定义的关系(在生产系统中,我们希望处理失败,而不是忽略它们)。
现在我们的流程完成了。它应该如下所示:

摄取数据¶
我们可以通过点击背景来取消选择任何处理器,然后点击NiFi用户界面左侧的“Play”按钮来开始流程。您应该看到数据通过NiFi流并被摄取。
将数据可视化¶
一旦数据被摄取,你就可以使用Geoserver在地图上可视化它。按照文件系统数据存储快速入门教程中的说明进行操作, 可视化数据(可选) 。
请注意,由于Docker文件权限,您可能需要运行类似以下内容的操作才能访问数据:
cd ~/gm-nifi-quickstart
docker run --rm \
-v "$(pwd)/fs:/fs:rw" \
--entrypoint bash \
apache/nifi:1.19.1 \
-c "chmod -R 777 /fs"