在 HBase 中使用单行

Posted

技术标签:

【中文标题】在 HBase 中使用单行【英文标题】:Consume a single row in HBase 【发布时间】:2012-10-31 09:52:24 【问题描述】:

我通过 Java API 使用 HBase 来管理 URL 和参数列表,这些 URL 和参数等待由具有多个线程的爬虫进行分析。该程序还不断向表中添加新行。

我需要从表中连续读取一行且仅一行并以原子方式删除它(一行不能被两个线程同时读取),没有选择一行而不是另一行的标准。

目前,我创建了一个 Scanner 并检索第一个结果:

Scan s = new Scan();
ss = t.getScanner(s);
for(Result r:ss)
  String ris=Bytes.toString(r.getRow())+Bytes.toString(r.getValue(Bytes.toBytes("TTL"),Bytes.toBytes("value")));
  //delete the retrieved row
  t.delete(new Delete(r.getRow()));
  ss.close();
  //return at the first iteration, after closing the Scanner
  return ris;

但是这个程序非常慢(也就是说,需要 10 秒或更长时间才能获得一个值),我不知道如何才能很好地完成它。如何在 HBase 中“使用”单行?

编辑:我忘了提到该表有一个带有单列的单列族

【问题讨论】:

【参考方案1】:

您可以尝试使用带有过滤器的扫描。我认为PageFilter 适合您的目的。

【讨论】:

这似乎是个好主意,我可以将结果大小限制为 1。不知道,谢谢!

以上是关于在 HBase 中使用单行的主要内容,如果未能解决你的问题,请参考以下文章

HBase基础知识

HBase产品|数据查询的玄铁剑:云HBase原生二级索引发布

Hadoop学习笔记--HBase相关操作指令

HBase二级索引方案

HBase基本概念

HBASE入门