HBase学习之路(七):理解计数器的基本概念及计数器的使用

一、计数器的基本概念

  • 我在前两篇文章中详细介绍了HBase的过滤器,这是HBase的高级特性之一,除了过滤器,HBase还有其他的高级特性,计数器便是其中一个。计数器(Counter),常见于各种的收集信息统计系统的点击流统计,比如何种APP的热搜,或者在线广告意见,这些应用需要收集到日志文件中用于后续的分析,用户可以使用计数器做实时统计,而放弃高延时的批处理操作。
  • 在HBase中,计数器机制是一种原子操作,需要注意的是,计数器是面向列的操作,即每次对特定计数器的操作只会锁住一列而不是一行,然后读取数据,再对当前数据做加法操作,最后再写入HBase中并释放该列的锁,在操作的过程中用户是可以访问这一行的其他数据的,否则如果用户对一整行的数据加锁然后读取数据,会造成大量的资源抢占问题,这在一个高负载的系统中是致命的。

二、在Shell中创建并操作计数器

  • 通过上面介绍可知,计数器在HBase中存储值得本质即是某一列,而列则是在做具体的值操作时才会显式出现,而在创建表的时候不会出现,因而在创建计数器时指定表名与列族即可,比如我创建的表名为counters,列族分别是daily、weekly、monthly的表:
    在这里插入图片描述
    然后像操作普通列一样,在操作计数器时,有着专门的命令:
    incre 'table' 'rowKey' 'column' 'increment-value'
    比如现在我想在daily这个列族上操作hits计数器,使它的值在原来基础上加1(初始默认为0):
    在这里插入图片描述
    使用如下命令可以查看一个计数器的值:
    get_counter 'table' 'rowKey' 'column'
    比如我想读取 ‘daily:hits’ 计数器的值:
    在这里插入图片描述
  • 值得注意的是,在操作计数器的时候只有一种操作,那就是加法操作,如果你想让一个计数器的值减1,则 ‘increment-value’ 这个参数为-1即可,具体规则如下:
    作用
    比零大的值 按给定的值增加计数器的值
    得到计数器当前的值,不增也不减
    比零小的值 按给定的值减少计数器的值

三、单计数器

  • 在使用计数器时,绝大多数情况下是通过Java API来使用,现来介绍单计数器。单计数器顾名思义就是一次操作只能操作一个计数器,用户需要自己设置列,方法由HTable类提供,方法签名如下:
    long incrementColumnValue(byte[] row,byte[] family,byte[] qualifier,long acount) throws IOException
    long incrementColumnValue(byte[] row,byte[] family,byte[] qualifier,long acount,boolean writeToWAL) throws IOException
    这两个方法都需要列的坐标参数和增加值,除此之外两个方法只在是否有writeToWAL这个参数上的区别,writeToWAL这个参数可以设置是否打开预写日志,默认是打开的。
    比如我在上面创建的表中,使用单计数器对计数器’daily:hits’进行操作:
    // 创建HBase的配置类
    Configuration conf = HBaseConfiguration.create(
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值