HBase系列四--计数器

本文介绍了HBase中的计数器功能,强调了其在行级锁机制下避免资源竞争的作用。计数器默认值为0,可通过incr操作增加值,而get和get_counters用于获取内容。在使用过程中需要注意put操作可能造成的预期不符问题。文章还提供了API示例,展示了如何创建和操作计数器,包括单个和多个计数器的增量操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、计数器
在hbase中,由于针对同一行的记录进行操作时,已经提供行级锁;这样的功能会带来大量资源竞争的后果;那么在hbase里面提供一个将列当做计数器的功能
1、计数器
计数器默认不用进行初始化默认值即为0;在计数器进行具体操作时可以添加对应的值;若是用户直接操作则需要使用
Bytes.toLong()--->解码 Bytes.toBytes(long)--->编码 注意编码时需要明确指定对应的参数为long类型;同时若是用户
通过put方法误操作之后,在通过incr操作 则会出现和预期不一致的内容;主要是用于在执行put时将对应的参数当成字符,而非Long
被shell当做字节数组存储,最高位设置成ascii的对应字母,在增加值的最低位字节再转成long类型,这样就会导致结果超出预期
incr : 计数器操作
get : 获取counter的具体内容(十六进制 非格式化内容)
get_counters : 获取counter的具体内容(格式化内容)
2、api
// 创建counter
// 1、创建hbase table
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
// 2、执行incr
//方法参数说明: Row columfamily column incr params
long cnt1 = htable.incrementColumnValue(Bytes.toBytes("20151202"), Bytes.toBytes("daily"), Bytes.toBytes("hits"), 1);
(1)、多计数器
// hbase table
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
// create incremnt
Increment incr = new Increment(Bytes.toBytes("20151202"));
// add params
incr.addColumn(Bytes.toBytes("daily"), Bytes.toBytes("clicks"), 1);
incr.addColumn(Bytes.toBytes("daily"), Bytes.toBytes("hits"), 1);
incr.addColumn(Bytes.toBytes("weekly"), Bytes.toBytes("clicks"), 10);
incr.addColumn(Bytes.toBytes("weekly"), Bytes.toBytes("hits"), 10);

//
Result result = htable.increment(incr);
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv +
" Value: " + Bytes.toLong(kv.getValue())
+" Byte Value: " + Bytes.toString(kv.getValueArray())
//+ " String Format Value: " + new String(kv.getValueArray())
);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值