`
dalan_123
  • 浏览: 84012 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

HBase系列四--计数器

阅读更多
一、计数器
     在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())
);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics