Hbase批量处理操作batch

    在Hbase中,许多基于列表的操作,如delete(List deletes)和get(List gets),都是基于batch()方法实现的,它们都是为了方便用户使用而对batch()方法进行了包装。下面是Hbase1.3.0中提供的batch()方法的签名:

void batch(final List actions,final Object[] results)throws InterruptedException,IOException;

Object[] batch(final List actions)throws InterruptedException,IOException;

    事实上,在Hbase1.3.0 API中,上面两个方法其实只是一个方法,其实现如下所示:

@Override
public void batch(final List actions,final Object[] results)throws InterruptedException, IOException {
    AsyncRequestFuture ars = multiAp.submitAll(pool, tableName, actions, null, results);
    ars.waitUntilDone();
    if (ars.hasError()) {
        throw ars.getErrors();
    }
}



@Override
public Object[] batch(final List actions)throws InterruptedException, IOException {
    Object[] results = new Object[actions.size()];
    batch(actions, results);
    return results;
}

    从上面的实现可以看出batch(fianl List actions)方法是对batch(List actions,final Object[] results)的进一步包装。

    为了安全起见,不应该将针对同一行的Put和Delete操作放在同一批次处理请求中,为了保证最好的性能,这些操作处理的顺序可能不同,但是这样会产生不可预知的结果。还有一个需要注意的是,当使用batch()功能执行批量put操作时,Put实例不会被写入到客户端缓冲区中,batch()请求是同步的,会把操作直接发往服务器。

你可能感兴趣的:(Hbase批量处理操作batch)