Hbase API高级特性-计数器

原创 2013年12月03日 16:12:16

1.  许多收集统计信息的应用有点击流或在线广告意见,这些应用需要收集到日志文件用作后续的分析,用户可以使用计数器做实时统计,从而放弃延时较高的批量处理操作。

2.  原子操作检查并修改:将当前列当作计数器。

即把一个 column 当作 一个 counter,这样便于给某些在线应用提供实时统计功能。(PS:比如帖子的实时浏览量:PV)

3.  如果没有计数器特性:用户需要对一行数据加锁,然后读取数据,再对当前数据做加法,最后写回Hbase并释放该行锁。这样会引起大量的资源竞争,有其是当客户端进程崩溃之后,尚未释放的锁需要等待超时恢复,这会是一个高负载的系统中引起灾难性的后果。

4.   计数器的增量可以是正数负数,正数代表加,负数代表减。

hbase(main):006:0> create'counters','daily','weekly','monthly'

0 row(s) in 2.2260 seconds

hbase(main):007:0> incr 'counters','201031003100','daily:hites',1

COUNTER VALUE = 1

hbase(main):008:0> incr'counters','201031003100','daily:hites',1

COUNTER VALUE = 2

hbase(main):009:0> get_counter  'counters','201031003100','daily:hites'

COUNTER VALUE = 2

5.  计数器就是一个与其他列类似的简单的列。

6.  单计数器:

    public void oneCounter(long num) throws IOException{
long cnt1 = table.incrementColumnValue(Bytes.toBytes("3100"), 
Bytes.toBytes("info"), Bytes.toBytes("name"), num);
}

7.  多计数器:

public void moreCounter() throws IOException{
Increment increment1 = new Increment(Bytes.toBytes("3100"));

increment1.addColumn(Bytes.toBytes("info"), Bytes.toBytes("clicks"), 20);
increment1.addColumn(Bytes.toBytes("info"), Bytes.toBytes("hits"), 1);
increment1.addColumn(Bytes.toBytes("class"), Bytes.toBytes("clicks"), 10);
increment1.addColumn(Bytes.toBytes("class"), Bytes.toBytes("hits"), 10);

Result result1 = table.increment(increment1);
for(KeyValue kv:result1.raw()){
System.out.println("KV1: "+kv +"value: "+Bytes.toLong(kv.getValue()));
}

/*Increment increment2 = new Increment(Bytes.toBytes("3102"));
increment1.addColumn(Bytes.toBytes("info"), Bytes.toBytes("clicks"), 5);
increment1.addColumn(Bytes.toBytes("info"), Bytes.toBytes("hits"), 1);
increment1.addColumn(Bytes.toBytes("class"), Bytes.toBytes("clicks"), 0);
increment1.addColumn(Bytes.toBytes("class"), Bytes.toBytes("hits"), -5);
Result result2 = table.increment(increment2);
for(KeyValue kv:result2.raw()){
System.out.println("KV2: "+kv +"value: "+Bytes.toLong(kv.getValue()));
}*/
}

 

HBase总结(9)--计数器

一、介绍 如果在HBase中使用某一行的值进行Put操作进行计数器功能,为了保证原子性操作,必然会导致一个客户端对计数器所在行的资源占有,如果在大量进行计数器操作时,则会占有大量资源,并且一旦某一客...
  • u011518678
  • u011518678
  • 2016年03月16日 20:40
  • 1010

hbase的计数器

需求: 每天会增量导入一批用户的uuid列表数据,也许会有几千万。计算这些用户的留存率的时候要与昨天的uuid列表做join取交集得到数量。当然join的效率是很低的。 所以考虑存hbase,设计成宽...
  • magina_lil
  • magina_lil
  • 2016年06月16日 21:38
  • 953

HBase - 计数器 - 计数器的介绍以及使用 | 那伊抹微笑

博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-...
  • u012185296
  • u012185296
  • 2015年08月07日 14:23
  • 3704

Hbase counter计数器

创建表名和列族名 create 't1','cf'   初始化counter为1 或 让counter+1 incr 't1','row1','cf:no',1   获取counter ...
  • qq_26182553
  • qq_26182553
  • 2017年07月13日 11:29
  • 148

HBase概念学习(五)Java API之计数器

本文为阅读《Hbase权威指南》后笔记。 1、计数器简介 之前在介绍Put和Delete的时候说道过检查并修改(Check and modify),计数器类似,也是为了防止多个客户端的资源...
  • jiq408694711
  • jiq408694711
  • 2014年06月18日 23:10
  • 2682

HBase 计数器

计数器使用计数器可以很好的应用于点击,造成的访问次数的改变。 命令行 进入到shell,执行incr ‘表名 ’rowKey’’计数器名称’ 数字。 默认的数字位置是1,即执行一次加1,可根据实际需求...
  • James_JR10
  • James_JR10
  • 2017年10月20日 10:02
  • 115

Hbase官方文档中文版

http://abloz.com/hbase/book.html#quickstart 目录 序1. 入门 1.1. 介绍1.2. 快速开始 2. Apache HBase (TM)配置 ...
  • blue_jjw
  • blue_jjw
  • 2014年12月15日 19:47
  • 11743

HBase Increment(计数器)简介及性能测试

HBase Increment(计数器)简介及性能测试
  • bryce123phy
  • bryce123phy
  • 2016年07月04日 18:08
  • 1546

hbaseFilter使用,以及简单封装

学习笔记: 简单的将spark访问hbase使用filter过滤的操作进行封装, 功能并不完善,无法做到把case class以反射的方式传入到方法中进行字段的构造 把构件表的操作放在单独处理的部分 ...
  • weinierzui
  • weinierzui
  • 2017年05月11日 15:25
  • 362

Hbase 统计表行数的3种方式总结

zz:http://blog.csdn.net/chaolovejia/article/details/46328983 有些时候需要我们去统计某一个hbase表的行数,由于hbase本身不支持...
  • u013709332
  • u013709332
  • 2016年08月24日 09:21
  • 15604
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hbase API高级特性-计数器
举报原因:
原因补充:

(最多只允许输入30个字)