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

../_images/nifi-qs-fs-controller-config.png

点击[应用],该服务应显示为[正在验证]。点击屏幕左下角的“刷新”按钮,该服务应显示为“已禁用”。点击配置档位旁边的小闪电,点击“启用”按钮将其启用。启用后,关闭该对话框,然后通过单击 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"}}

../_images/nifi-qs-update-attributes.png

前三个属性定义输入数据的格式。最后一个属性由GeoMesa文件系统数据存储用于对磁盘上的数据进行分区。看见 分区方案 以获取更多信息。

接下来,将 FetchFile 处理器连接到 UpdateAttribute 处理器,以及 UpdateAttribute 处理器连接到 PutGeoMesa 处理器。自动终止任何其他仍未定义的关系(在生产系统中,我们希望处理失败,而不是忽略它们)。

现在我们的流程完成了。它应该如下所示:

../_images/nifi-qs-flow.png

摄取数据

我们可以通过点击背景来取消选择任何处理器,然后点击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"