GeoMesa Lambda快速入门

本教程可以帮助您开始使用GeoMesa Lambda数据存储。请注意,Lambda数据存储适用于高级用例-请参阅 Lambda数据存储概述 有关何时使用Lambda商店的详细信息。

关于本教程

本着简单的精神,本教程中的代码只做了几件小事:

  1. 建立新的(静态)SimpleFeatureType

  2. 准备Acumulo表和Kafka主题以写入此类型的数据

  3. 创建数千个SimpleFeature示例

  4. 通过Kafka反复更新Lambda商店中的这些SimpleFeature

  5. 在Geoserver中可视化更改的数据

  6. 将最终的SimpleFeature保持为Acumulo

  7. 使用Geoserver可视化数据(可选)

背景

Apache Kafka 是“将发布-订阅消息传递重新考虑为分布式提交日志”。

在GeoMesa的背景下,Kafka是处理地理空间数据流的有用工具。Lambda数据存储利用了由Kafka提供支持的最新更新的临时内存缓存,并结合了对Acumulo的长期持久性。这允许快速数据更新,从而减轻了Acumulo因不断删除和写入而产生的负担。

先决条件

在开始之前,您必须安装并配置以下软件:

  • Java JDK 1.8

  • Apache Maven 3.6 or later

  • GitHub客户端

  • 卡夫卡 2.0 or later 聚类

  • 一场积雨 2.0 or 2.1 实例

  • 同时具有CREATE-TABLE和WRITE权限的Acumulo用户

  • 为您的实例安装的GeoMesa分布式运行时(见下文)

确保您的Kafka和ZooKeeper实例正在运行。你可以用卡夫卡的 quickstart 快速启动和运行Kafka/ZooKeeper实例。

安装GeoMesa分布式运行时

按照下面的说明进行操作 安装Acumulo分布式运行时库 在您的Acumulo实例中安装GeoMesa。

配置地理服务器(可选)

您可以使用Geoserver访问和可视化存储在GeoMesa中的数据。要使用Geoserver,请下载并安装版本 2.22.2 。然后按照中的说明操作 在Geoserver中安装GeoMesa Lambda 以启用GeoMesa。

下载并构建教程

在您的计算机上选择一个合理的目录,然后运行:

$ git clone https://github.com/geomesa/geomesa-tutorials.git
$ cd geomesa-tutorials

警告

确保下载或检出与您的GeoMesa版本对应的教程项目版本。看见 关于教程版本 了解更多详细信息。

若要确保快速入门适用于您的环境,请修改 pom.xml 为Acumulo、Hadoop、Kafka、ZooKeeper等设置合适的版本。

为了便于使用,该项目构建了一个捆绑的构件,该构件在单个JAR中包含所有必需的依赖项。要构建,请运行:

$ mvn clean install -pl geomesa-tutorials-accumulo/geomesa-tutorials-accumulo-lambda-quickstart -am

关于本教程

快速入门通过编写数千个功能更新来运行。每次更新都使用相同的功能标识,因此在任何时候都只有一个“活动”功能。大约30秒后,更新停止,该功能将保留到Acumulo。

使用的数据来自伊利诺伊大学发布的纽约市出租车活动数据。有关数据集的更多信息可用 here

在此演示中,只有一辆出租车被跟踪。

运行教程

在命令行上,运行:

$ java -cp geomesa-tutorials-accumulo/geomesa-tutorials-accumulo-lambda-quickstart/target/geomesa-tutorials-accumulo-lambda-quickstart-${geomesa.version}.jar \
    com.example.geomesa.lambda.LambdaQuickStart        \
    --lambda.accumulo.instance.name <instance>         \
    --lambda.accumulo.zookeepers <accumulo.zookeepers> \
    --lambda.accumulo.user <user>                      \
    --lambda.accumulo.password <password>              \
    --lambda.accumulo.catalog <table>                  \
    --lambda.kafka.brokers <brokers>                   \
    --lambda.kafka.zookeepers <kafka.zookeepers>       \
    --lambda.expiry 2s

其中,您可以提供以下参数:

  • <instance> 您的Acumulo实例的名称

  • <accumulo.zookeepers> 您的Acumulo ZooKeeper节点,用逗号分隔

  • <user> 有权创建、读取和写入表的Acumulo用户的名称

  • <password> 前面提到的Acumulo用户的密码

  • <table> 将接受这些测试记录的目标表的名称。此表不应存在或应为空

  • <brokers> your Kafka broker instances, comma separated. For a local install, this would be localhost:9092

  • <kafka.zookeepers> your Kafka Zookeeper nodes, comma separated. For a local install, this would be localhost:2181

警告

如果已将GeoMesa Acumulo分布式运行时设置为在命名空间内隔离(请参见 命名空间安装 )的价值 <table> 应包括命名空间(例如 myNamespace.geomesa )。

或者,您也可以指定快速入门在完成时删除其数据。使用 --cleanup 标志,当您运行以启用此行为时。

一旦运行,快速入门将创建卡夫卡主题,然后暂停并提示您在Geoserver中注册该层。如果您不想使用Geoserver,则可以跳过此步骤。否则,请在返回此处之前按照下一节中的说明进行操作。

继续后,教程应该运行大约30秒。您应该会看到以下输出:

Loading datastore

Creating schema: taxiId:String,dtg:Date,geom:Point

Feature type created - register the layer 'tdrive-quickstart' in geoserver then hit <enter> to continue

Generating test data

Writing features to Kafka... refresh GeoServer layer preview to see changes
Wrote 2202 features

Waiting for expiry and persistence...
Total features: 1, features persisted to Accumulo: 0
Total features: 0, features persisted to Accumulo: 0
Total features: 1, features persisted to Accumulo: 1

Done

使用Geoserver可视化数据(可选)

您可以使用Geoserver访问和可视化存储在GeoMesa中的数据。要使用Geoserver,请下载并安装版本 2.22.2 。然后按照中的说明操作 在Geoserver中安装GeoMesa Lambda 以启用GeoMesa。

向Geoserver注册GeoMesa商店

使用您的用户和密码凭据登录到Geoserver。点击“商店”和“添加新商店”。选择 Kafka/Accumulo Lambda (GeoMesa) 矢量数据源,并填写所需参数。

基本店铺信息:

  • workspace 这取决于您的Geoserver安装

  • data source name pick a sensible name, such as geomesa_quick_start

  • description this is strictly decorative; GeoMesa quick start

连接参数:

  • 这些参数值与您在运行本教程时在命令行上提供的参数值相同;它们描述了如何连接到数据所在的Kafka和Acumulo实例

点击“保存”,Geoserver将在ZooKeeper中搜索任何GeoMesa管理的要素类型。

发布该层

如果您已经运行了该命令来启动教程,那么Geoserver应该会识别 tdrive-quickstart 要素类型,并应将其显示为可发布的图层。点击“发布”链接。如果不是,则按照上文中所述运行教程 Running the Tutorial 。当教程暂停时,转到“层”和“添加新层”。选择您刚刚创建的GeoMesa Lambda商店,然后在 tdrive-quickstart 一层。

您将被带到编辑层屏幕。您需要为数据边框输入值。对于本演示,请使用值Minx:116.22366、Miny:39.72925、Maxx:116.58804、Maxy:40.09298。

完成后,请单击“保存”按钮。

瞧一瞧

点击左手边沟中的“层预览”链接。如果在结果的第一页上看不到快速启动图层,请在搜索框中输入刚创建的图层的名称,然后按 <Enter>

起初,不会显示任何数据。达到此点后,返回快速入门控制台,然后按“<Enter>”继续本教程。随着数据在Kafka中的更新,您可以刷新图层预览页面以查看要素的移动。

暂时性特征与永久性特征

层预览将合并来自Kafka的要素和来自Acumulo的要素的结果。您可以使用以下方法禁用其中一个源的结果 viewparams 参数:

...&viewparams=LAMBDA_QUERY_TRANSIENT:false
...&viewparams=LAMBDA_QUERY_PERSISTENT:false

在运行快速入门时,所有功能都应该从临时存储(Kafka)中返回。快速入门结束后,所有功能都应该从持久性存储(Acumulo)中返回。你可以玩这个游戏 viewparams 来看看不同之处。

看《守则》

源代码对于本教程来说是可以访问的。该逻辑包含在泛型 org.geomesa.example.quickstart.GeoMesaQuickStartgeomesa-tutorials-common 模块和特定于Kafka/Acumulo的 org.geomesa.example.lambda.LambdaQuickStartgeomesa-tutorials-accumulo-lambda-quickstart 模块。一些相关的方法包括:

  • createDataStore 从输入配置中获取数据存储实例

  • createSchema 在数据存储中创建架构,作为写入数据的前提条件

  • writeFeatures 中被重写 KafkaQuickStart 同时写入和读取卡夫卡的特写

  • queryFeatures 在本教程中未使用

  • cleanup 删除示例数据并处置数据存储实例

查看源代码,您可以看到普通的GeoTools FeatureWriters ;功能持久性是为您透明管理的。

QuickStart使用出租车数据的一小部分。将数据解析为GeoTools SimpleFeature的代码包含在 org.geomesa.example.data.TDriveData

  • getSimpleFeatureType 创建 SimpleFeatureType 表示数据

  • getTestData 解析嵌入的CSV文件以创建 SimpleFeature 对象

  • getTestQueries 在本教程中未使用

重新运行快速入门

快速启动依赖于在运行时没有任何现有状态。这可能会导致旧版本的Kafka出现问题,默认情况下,Kafka在请求时不会删除主题。要重新运行快速入门,请首先确保您的Kafka实例将通过设置配置删除主题 delete.topic.enable=true 在您的服务器属性中。然后使用Lamdba命令行工具(请参见 设置Lambda命令行工具 要删除快速入门架构,请执行以下操作:

$ geomesa-lambda remove-schema -f tdrive-quickstart ...