15.9. 命令行示例

本章提供了GeoMesa中一些常见任务的动手示例,包括管理数据存储中注册的要素类型、获取数据以及以各种格式导出数据。

15.9.1. 要素类型管理

15.9.1.1. 创建要素类型

首先,让我们在GeoMesa中使用创建新要素类型 create 指挥部。这个 create 命令接受三个必需标志和一个可选标志:

Required

  • -c--catalog :目录表的名称

  • -f--feature-name :功能的名称

  • -s--specSimpleFeatureType 规格

Optional

  • --dtg: the default date attribute of the SimpleFeatureType

运行命令:

$ geomesa-accumulo create-schema -u <username> -p <password> \
-c cmd_tutorial \
-f feature \
-s fid:String:index=true,dtg:Date,geom:Point:srid=4326 \
-dtg dtg

这将在GeoMesa目录表“cmd_Tutorial”上创建一个名为“Feature”的新要素类型。CATALOG表存储有关每个要素的元数据信息,它将用于在Acumulo中为每个表名添加前缀。

如果上述命令成功,您应该会看到类似以下内容的输出:

Creating 'cmd_tutorial_feature' with spec 'fid:String:index=true,dtg:Date,geom:Point:srid=4326'. Just a few moments...
Feature 'cmd_tutorial_feature' with spec 'fid:String:index=true,dtg:Date,geom:Point:srid=4326' successfully created.

现在您已经了解了如何创建要素类型,请使用您自己的名字在目录表“cmd_Tutorial”上创建另一个要素类型 --feature-name 和上面的架构 --spec

15.9.1.2. 列出已知要素类型

在目录表“cmd_Tutorial”上应该有两种特征类型。为了验证,我们将使用 list 指挥部。这个 list 命令接受一个标志:

  • -c--catalog :目录表的名称

运行以下命令:

$ geomesa-accumulo get-type-names -u <username> -p <password> -c cmd_tutorial

输出文本应如下所示:

Listing features on 'cmd_tutorial'. Just a few moments...
2 features exist on 'cmd_tutorial'. They are:
feature
gdelt

15.9.1.3. 查找要素类型的属性

要了解有关要素类型属性的详细信息,我们将使用 describe 指挥部。此命令采用两个标志:

  • -c--catalog :目录表的名称

  • -f--feature-name :要素类型的名称

让我们了解有关第一个要素类型的属性的更多信息。运行命令

$ geomesa-accumulo describe-schema -u <username> -p <password> -c cmd_tutorial -f feature

输出应如下所示:

Describing attributes of feature 'cmd_tutorial_feature'. Just a few moments...
fid: String (Indexed)
dtg: Date (Time-index)
geom: Point (Geo-index)

15.9.1.4. 删除要素类型

接下来,让我们删除使用创建的第一个要素类型 remove-schema 指挥部。这个 remove-schema 命令带有两个标志:

  • -c--catalog :目录表的名称

  • -f--feature-name :要删除的要素的名称

运行以下命令:

$ geomesa-accumulo remove-schema -u <username> -p <password> -c cmd_tutorial -f feature

注意:运行此命令所需的时间比前两个命令要长一些,因为它将删除Acumulo中的三个表,并删除与该特性关联的目录表中的元数据行。

输出应如下所示:

Remove schema feature from catalog cmd_tutorial? (yes/no): yes
Starting
State change: CONNECTED
Removed feature

15.9.2. 获取数据

GeoMesa Tools是一组命令行工具,用于从命令行添加要素管理功能、查询规划和解释、摄取和导出功能。在本教程中,我们将介绍如何使用GeoMesa工具获取和导出要素。

15.9.2.1. 获取数据

在本教程中,我们将使用GDELT数据集,可从以下位置获得:http://data.gdeltproject.org/events/index.html.下载任何日常数据文件,例如::

20160119.export.CSV.zip

并将文件解压缩到您的计算机上。

备注

解压后的文件有 *.CSV 扩展,但其中的数据实际上是 tab 分居了。

15.9.2.2. 摄取功能

摄取命令目前支持三种格式:CSV、TSV和SHP。

这个 ingest 命令具有以下必需的标志:

  • -u--user :Acumulo用户

  • -c--catalog :GeoMesa目录表的名称

  • -f--feature-name :要接收的要素的名称

还必须指定以下标志中的一个(不能同时指定):

  • -p--password :Acumulo密码

  • --keytab :Kerberos密钥表文件的路径

如果 -p (或 --password )和 --keytab 都被省略,则假定进行密码身份验证,并提示用户输入密码。

如果 $ACCUMULO_HOME 不包含您要连接到的Acumulo实例的配置,您还必须指定Acumulo的连接参数:

  • -i--instance :Acumulo实例

  • -z--zookeepers :以逗号分隔的ZooKeeper主机列表

可选的 -C 开关允许您指定在基于JSON的指令文件中定义的关于如何在GeoMesa读取数据时转换数据的转换器。转换器库处理许多必要的数据转换,以便将原始数据集适合于适合在GeoMesa应用程序中使用的简单要素类型。转换可以利用各种功能,例如 concatenate()stringToInteger() 函数以及正则表达式的使用。有关详细信息,请参阅 设置摄取转换器 下面。

所有摄取命令所需的最后一个参数是要摄取的文件的路径。如果接收CSV/TSV数据,这可以是HDFS路径,通过为其添加前缀来指定 hdfs://

15.9.2.3. 设置摄取转换器

要使用 -C 切换、创建(或编辑)文件 $GEOMESA_ACCUMULO_HOME/conf/application.conf ,它用作转换器配置文件,以添加 gdelt SimeFeatureType和转换器 gdelt_csv 用于从制表符分隔值文件中读取数据:

geomesa {
  sfts {
    gdelt = {
      fields = [
        { name = globalEventId, type = String, index = false}
        { name = eventCode, type = String }
        { name = actor1, type = String }
        { name = actor2, type = String }
        { name = dtg, type = Date, index = true }
        { name = geom, type = Point, srid = 4326 }
      ]
    }
  }
  converters {
    gdelt_tsv = {
      type = delimited-text
      format = TDF
      id-field = "$1" // global event id
      fields = [
        { name = globalEventId, transform = "$1" }
        { name = eventCode,     transform = "$27" }
        { name = actor1,        transform = "$7" }
        { name = actor2,        transform = "$17" }
        { name = dtg,           transform = "date('yyyyMMdd', $2)" }
        { name = geom,          transform = "point(stringToDouble($41, 0.0), $40::double)" }
      ]
    }
  }
}

配置文件需要有一个 SimpleFeatureType 与指定如何将原始数据文件转换为该简单要素类型的指令的转换器一起定义。看见 GeoMesa转换器 有关转换器的更多详细信息,包括可用的转换函数的完整列表 (变换函数概述 )。

此示例使用 date() 函数来告诉解析器哪个日期列在其中。这个 stringToDouble()::double 函数为类型转换提供了两种不同的方法。这个 stringTo<dataType>() 方法接受要强制转换的值以及在出现异常时将返回的预先指定的默认值,而 ::double 如果强制转换失败,函数将失败(并丢弃记录)。

要确认GeoMesa可以正确解析您编辑的 $GEOMESA_ACCUMULO_HOME/conf/application.conf 文件,使用 geomesa-accumulo env

$ geomesa-accumulo env -s gdelt --format spec
Using GEOMESA_ACCUMULO_HOME = /opt/geomesa/tools
Simple Feature Types:
gdelt = globalEventId:String,eventCode:String,actor1:String,actor2:String,dtg:Date:index=join,*geom:Point:srid=4326;geomesa.index.dtg='dtg'

$ geomesa-accumulo env -c gdelt_tsv
Using GEOMESA_ACCUMULO_HOME = /opt/geomesa/tools

Simple Feature Type Converters:
converter-name=gdelt_tsv
fields=[
    {
        name=globalEventId
        transform="$1"
    },
    {
        name=eventCode
        transform="$27"
    },
    {
        name=actor1
        transform="$7"
    },
    {
        name=actor2
        transform="$17"
    },
    {
        name=dtg
        transform="date('yyyyMMdd', $2)"
    },
    {
        name=geom
        transform="point(stringToDouble($41, 0.0), $40::double)"
    }
]
format=TDF
# global event id
id-field="$1"
type=delimited-text

15.9.2.4. 下载样本数据

与geomesa打包在一起的脚本,用于轻松下载公开可用的数据集和一组相应的配置文件。

目前可用的数据集包括 GDELT, GeoLife, OSM-GPX, T-Drive, GeoNames, NYCTaxi, GTD, 和 Twitter. 其中的前五组可以通过提供的脚本轻松下载。

要下载这些数据集,请运行geomesa-tools/bin中的下载脚本,并提供所需数据集的名称。这可以是以下之一 gdeltgeolifeosm-gpxtdrive ,或 geonames

用法示例:

$ ./download-data.sh geolife

根据所需的数据,可能会提示您进一步信息以指定所需的日期或地点。

生成的数据随后将下载到 $GEOMESA_ACCUMULO_HOME/data

这些数据集的配置文件位于 $GEOMESA_ACCUMULO_HOME/conf/sfts 。可以通过运行以下命令查看对它们的修改 geomesa-accumulo env 并将在下一次摄取中反映出来。

15.9.2.5. 正在进行摄取

现在我们已经准备好了,现在我们将把各种参数组合成以下完整的摄取命令:

$ geomesa-accumulo ingest \
   -u <username> -p <password> -i <instance> -z <zookeepers> \
   -c gdelt -s gdelt -C gdelt_tsv --threads 1 \
   /path/to/<gdelt-data-file>.csv

<username><password> 是与Acumulo实例关联的凭据。 <instance><zookeepers> 中的配置文件中未指定的Acumulo的连接参数 $ACCUMULO_HOME

15.9.3. 导出要素

让我们以几种文件格式导出您新获取的功能。目前, export 命令支持导出为CSV、TSV、Shapefile、GeoJSON和GML。在下一节中,我们将使用每种格式中的一种。

这个 export 命令有3个必需的标志:

  • -c--catalog :目录表的名称

  • -f--feature-name :要导出的要素的名称

  • -F--format :输出格式 (csvtsvshpgeojson ,或 gml )

此外,您还可以使用可选标志指定有关要执行的导出类型的更多详细信息 export

  • -a--attributes :要返回的要素的属性

  • -m--max-features :要在导出中返回的最大要素数

  • -q or --query: a CQL query 对要素执行操作,仅返回与查询匹配的要素子集

我们将使用 --max-features 标志,以确保我们的数据集很小并且可以快速导出。首先,我们将使用以下命令导出到CSV:

$ geomesa-accumulo export -u <username> -p <password> -c gdelt_Ukraine -fn gdelt -fmt csv -max 50
# or specifying Accumulo configuration explicitly:
$ geomesa-accumulo export \
    -u <username> -p <password> -i <instance> -z <zookeepers> \
    -c gdelt -f gdelt -f csv -m 50

该命令将相关行输出到控制台。现在检查行,或将输出通过管道传输到文件中以供以后查看。

现在,再运行上述命令四次,更改 --format 标志为 tsvshpjson ,以及 gml 。这个 shp 格式还要求 -o 选项以指定输出文件的名称。