【问题标题】:Is Geomesa indexes are reliable and remain in sync with main table?Geomesa 索引是否可靠并与主表保持同步?
【发布时间】:2019-05-29 20:54:27
【问题描述】:

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

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

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

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

HBase 表:

目录1
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 节点

INFO 描述特征“节点”的属性

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

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

【问题讨论】:

  • 所以如果我更新主表中的一条记录,我还必须手动更新所有索引表?

标签: geolocation geomesa


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢 Emillio 的解释。 Geomesa 无法写入不同的索引表时会抛出什么异常?你有关于 geomesa 抛出的异常列表的文档吗?
  • 如果是验证错误,通常是IllegalArgumentException。如果写入 HBase 时出错,则无论 HBase 客户端抛出什么异常。
  • 根据您的回复,我假设,当 Geomesa 尝试将数据插入索引表(例如 catalog1_node_z3_geom_lastUpdateTime_v6)时,它失败了,然后 Geomesa 将抛出 Hbase 异常,即使它已将数据保存在其他索引表和主表成功。 这种理解正确吗?
  • 是的,这就是为什么您应该重试失败的写入 - 这将保证最终的一致性。
  • 所以如果我更新主表中的一条记录,我还必须手动更新所有索引表?
猜你喜欢
  • 2016-02-15
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多