首页 > 解决方案 > 如何从 Geomesa 中的 hbase 批量获取数据?

问题描述

GeoTools api是Geomesa摄取方法从Hbase获取数据的一种方式,但是当我使用org.geotools.data.simple.SimpleFeatureCollection时,似乎只有一个Iterator可以被SimpleFeatureCollection.features()操作,出现一个问题当我想遍历结果时, iterator.hasNext() 方法花费太多时间,我可以从 Geomesa 中的 hbase 中批量获取数据,而不仅仅是 Iterator 吗?

标签: hbasegeomesa

解决方案


在幕后,进行了一些批处理,但是这些批处理是延迟获取的(即在调用 时hasNext,如果没有任何本地数据,它将进行远程获取)。您可以通过系统属性控制 HBase 预读geomesa.hbase.client.scanner.caching.size(参见此处)。然而,GeoTools API 不提供任何批处理机制。

对于简单的用例,如果您只想预先获取所有内容,则可以将迭代器拉入 ArrayList,然后对其进行操作。为了避免等待整个结果集被提取,您可以设置生产者/消费者线程,以便一个线程持续预取数据,第二个线程对返回的结果进行操作。

对于更高级的用例,您可以使用Spark(或直接 map/reduce)一次加载整个结果集。


推荐阅读