0

为了创建索引,Geomesa 在 HBase 中创建了多个表。我有几个问题:

  1. Geomesa 做了什么来确保这些表同步?
  2. 如果索引表不同步,对 Geomesa 查询有何影响?
  3. 如果 Geomesa 无法写入其中一个索引表,会发生什么(使用 write 调用)?
  4. 表之间的同步是最好的努力还是 Geomesa 确保数据的可用性具有最终的一致性?

我计划使用 Geomesa 和 Hbase(由 S3 支持)组合来存储我的地理空间数据;数据大小可以增长到 TB 到 PB。

我正在调查 Geomesa 在主表和索引表之间的同步方面有多可靠?

HBase 表:

catalog1
catalog1_node_id_v4(主表)
catalog1_node_z2_geom_v5(索引表)
catalog1_node_z3_geom_lastUpdateTime_v6(索引表)
catalog1_node_attr_identifier_geom_lastUpdateTime_v8(索引表)

Geomesa 模式

geomesa-hbase describe-schema -c catalog1 -f 节点

信息描述特征“节点”的属性

关键 | 字符串
命名空间 | 字符串
标识符 | 字符串(属性索引)
versionId | 字符串
节点 ID | 字符串
纬度 | 整数经度 | 整数上次更新时间 | 日期(时空索引)
标签 | 地图
几何 | 点(时空索引)(空间索引)

用户数据:geomesa.index.dtg | lastUpdateTime
geomesa.indices | z3:6:3:geom:lastUpdateTime,z2:5:3:geom,id:4:3:,attr:8:3:identifier:geom:lastUpdateTime

4

1 回答 1

1

GeoMesa 不会做任何事情来同步索引 - 通常这应该在您的摄取管道中处理。

如果您有一个与给定输入特征相关联的可靠特征 ID,那么您可以多次编写该特征而不会导致重复。在摄取期间,如果一批功能由于暂时性问题而失败,那么您只需重新编写它们以确保索引正确。

对于 HBase,当您调用flushclose在功能编写器上时,挂起的突变将被发送到集群。一旦该方法成功返回,则数据已持久化到 HBase。如果抛出异常,您应该重新尝试失败的功能。如果有后续 HBase 故障,您可能需要按照标准 HBase 操作恢复预写日志 (WAL)。

由于验证(例如空几何),特征也可能无法写入。在这种情况下,您不希望重新尝试该功能,因为它永远不会成功提取。如果您使用的是 GeoMesa 转换器框架,您可以预先验证功能以确保它们能够正常摄取。

如果您还没有摄取管道,您可能需要查看geomesa-nifi,它可以让您转换和验证输入数据,并通过 Nifi 流自动重试失败。

于 2019-05-29T12:54:27.293 回答