在HBase中实现与checkAndPut一起批处理的任何方法

时间:2012-11-28 20:49:01

标签: hbase

我正致力于写入HBase集群。我只有在数据不存在时才写,因此我使用checkAndPut()。但与put(List<Put>)相比,表现较差。有什么方法可以将这两个操作结合起来吗?我试着环顾四周但找不到任何东西。

1 个答案:

答案 0 :(得分:6)

使用checkAndPut()时,每个请求都会执行一次RPC调用。因此,您无法达到每秒1 / rtt次请求的性能(rtt是往返时间)。如果您的客户端和区域服务器之间的距离为1毫秒,则理论最大值为1000 rps。使用put(List<Put>)之类的批处理操作时,需要更少的RPC调用,从而导致性能提升。我看到两种解决问题的方法:

  1. 使用工作池来并行请求。您可以找到有用的HTablePool类来管理工作人员的连接。

  2. 如果您不需要了解操作状态(插入新单元格或旧单元格仍然存在),您可能会尝试编写协处理器,以便在单元格存在时静默地丢弃请求。在这种情况下,如果您需要更换某个单元格,则必须先将其删除。