java - 从 HBASE 表中查询大量数据时 Result 对象的大小
问题描述
我正在尝试使用行键查询 hbase 表。我们有以下结构
- 具有实际表的行键的索引表
- 包含压缩格式的 json 数据的实际表。
当我尝试查询 hbase 时,我必须使用带有一些过滤器的扫描来扫描第一个索引表的行键,这将导致字节数组。(行键)。一旦我们获得了行键,我们就会在 Table 对象中调用 listofGets()。一旦获得,我们将迭代对象并准备一个包含压缩 json 对象的列表。在这里,我们不确定对象的大小和数量。如果对象数量很大,我们可能会导致 OOM。我们是否有任何选项可以返回迭代器或缓冲结果,以避免 OOM。
for (byte[] rowkey : indexTableOutput)
{
Get get = new Get(rowkey).addFamily(Bytes.toBytes(columnFamilty)).setMaxVersions(MAX_VERSIONS);
listOfget.add(get);
}
上面的代码用于从索引表中检索键。
TableName tableName = TableName.valueOf("table1");
Table tableObj = conn.getTable(tableName);
Result[] results = tableObj.get(listOfget);
从上面的代码中,我们有几个查询。任何帮助,将不胜感激。
- 如果我们有大量数据,Result[] 会包含所有结果吗?
- 如何返回迭代器类型的对象,以便我们可以将其留给消费者,因为保留所有数据并进行处理将导致 OOM
- 返回有限数据的任何其他选项,以便消费者进行处理并继续
我可以找到一个结果扫描器正在返回扫描对象。但是找不到获取列表的任何其他选项。在这里,我们知道索引表中的确切键。
解决方案
推荐阅读
- c# - 错误:未经身份验证,必须通过身份验证才能使用“/drive”语法 - 使用 rest api 获取项目时(图表)
- java - Infinispan Junit 5:CacheConfigurationException:ISPN000501:无法持久缓存配置,因为全局状态已禁用
- python - Spyder 无法显示您尝试查看的变量
- c# - Mapster,尝试映射到具有许多没有默认构造函数的类的字段并失败
- java - “E/android.hardware.audio@6.0-impl.ranchu: WriteThread::doWriteImpl:226: pcm_write failed with Operation not allowed”在 Android Studio
- python - 从 Excel 文件中查找 Python 中的中位数
- cassandra - Cassandra:删除整个分区会创建墓碑吗?
- sql - 如何防止ms sql server中现有表中给定外键的重复条目。?
- firebase - [] 未在 Map 中定义
- python - python - 如何根据Python中的条件合并两行熊猫数据框?