[HBase] Hbase Counters

本文是笔者学习过程中的简单笔记,日后会逐渐增加内容,主要参考资料是《Hbase The Definitive Guide》。

许多应用需要收集统计信息,如点击量、浏览量,这些信息通常通过后续分析日志来获取。通过使用Counters,可以实现在线统计,放弃延迟的批处理分析日志的方法。

Hbase处了check-and-modify操作外,还有一个处理columns的机制,那就是counters.。该机制使开发者不必再对行进行枷锁,操作数据,解锁这样繁琐且低效、危险的操作。


Single Counters

例子:

		//加1
		long cnt1=table.incrementColumnValue(Bytes.toBytes("row1"), 
				Bytes.toBytes("f1"), Bytes.toBytes("c1"),(long)1);
		//当前值
		long cnt2=table.incrementColumnValue(Bytes.toBytes("row1"), 
				Bytes.toBytes("f1"), Bytes.toBytes("c1"),(long)0);
		//减1
		long cnt3=table.incrementColumnValue(Bytes.toBytes("row1"), 
				Bytes.toBytes("f1"), Bytes.toBytes("c1"),(long)-1);

Mulitiple Counters

Readers Beware!
 In fact, there is no atomicity guarantee made for readers.

其构造函数如下:

Increment() {}
Increment(byte[] row)
Increment(byte[] row, RowLock rowLock)
在初始化Increment时,需要提供一个row key :接下来调用table.increment(Increment)方法时,所有的counters都在该行的cell中操作

例子:

		Increment increment1 =new 
				Increment(Bytes.toBytes("row1"));
		//
		increment1.addColumn(Bytes.toBytes("f1"),
				Bytes.toBytes("c1"), (long)-10);
		
		increment1.addColumn(Bytes.toBytes("f1"),
				Bytes.toBytes("c2"), (long)-10);
		//
		increment1.addColumn(Bytes.toBytes("f2"),
				Bytes.toBytes("c1"), (long)1);
	
		increment1.addColumn(Bytes.toBytes("f2"),
				Bytes.toBytes("c2"), (long)20);
		//
		
		Result result1=table.increment(increment1);
		String row=Bytes.toString(result1.getRow());
		String family,qualifier;
		long value;
		for(KeyValue kv:result1.raw()){
			family=Bytes.toString(kv.getFamily());
			qualifier=Bytes.toString(kv.getQualifier());
			value=Bytes.toLong(kv.getValue());
			
			System.out.println("row="+row+","+family+":"+qualifier+",value="+value);
		}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值