HBase计数器
#创建counters表 列族['daily','weekly','monthly']
hbase(main):001:0> create 'counters','daily','weekly','monthly'
0 row(s) in 1.5670 seconds
=> Hbase::Table - counters #递增命中 步长默认为1
hbase(main):002:0> incr 'counters', '20150101', 'daily:hits', 1
COUNTER VALUE = 1
0 row(s) in 0.3320 seconds hbase(main):003:0> incr 'counters', '20150101', 'daily:hits', 1
COUNTER VALUE = 2
0 row(s) in 0.0140 seconds #获取计数器
hbase(main):004:0> get_counter 'counters', '20150101', 'daily:hits'
COUNTER VALUE = 2
#使用了put去修改计数器 会导致后面的错误 原因是'1'会转换成Bytes.toBytes()
hbase(main):020:0> put 'counters' ,'20150102','daily:hits','1'
0 row(s) in 0.0520 seconds hbase(main):021:0> incr 'counters', '20150102', 'daily:hits', 1 ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 1 bytes wide
at org.apache.hadoop.hbase.regionserver.HRegion.getLongValue(HRegion.java:7647)
at org.apache.hadoop.hbase.regionserver.HRegion.applyIncrementsToColumnFamily(HRegion.java:7601)
at org.apache.hadoop.hbase.regionserver.HRegion.doIncrement(HRegion.java:7480)
at org.apache.hadoop.hbase.regionserver.HRegion.increment(HRegion.java:7440)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.increment(RSRpcServices.java:551)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.mutate(RSRpcServices.java:2227)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:33646)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2178)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108)
at java.lang.Thread.run(Thread.java:745) hbase(main):001:0> get 'counters','20150102'
COLUMN CELL
daily:hits timestamp=1472808748361, value=1
1 row(s) in 0.3190 seconds hbase(main):002:0> put 'counters' ,'20150102','daily:hits','1'
0 row(s) in 0.0640 seconds hbase(main):003:0> get 'counters','20150102'
COLUMN CELL
daily:hits timestamp=1472808858593, value=1
1 row(s) in 0.0090 seconds
#计数步长20
hbase(main):004:0> incr 'counters', '20150101', 'daily:hits', 20
COUNTER VALUE = 22
0 row(s) in 0.0260 seconds hbase(main):005:0> incr 'counters', '20150101', 'daily:hits', 20
COUNTER VALUE = 42
0 row(s) in 0.0090 seconds #默认步长是1
hbase(main):009:0>
hbase(main):010:0* incr 'counters', '20150101', 'daily:hits'
COUNTER VALUE = 45
0 row(s) in 0.0100 seconds #计数器可以-1
hbase(main):011:0> incr 'counters', '20150101', 'daily:hits', -1
COUNTER VALUE = 44
0 row(s) in 0.0110 seconds hbase(main):012:0> incr 'counters', '20150101', 'daily:hits', -1
#计数也可为0
hbase(main):013:0> incr 'counters', '20150101', 'daily:hits', 0
COUNTER VALUE = 43
0 row(s) in 0.0080 seconds

JAVA操作:

单计数器:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; /**
* 单计数器
* similarface
* similarface@outlook.com
*/
public class SingleCounter {
public static void main(String args[]) throws IOException{
Configuration configuration = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("counters"));
//incrementColumnValue(行号,列族,列,步长)
long cnt1=table.incrementColumnValue(Bytes.toBytes("20150105"),Bytes.toBytes("daily"),Bytes.toBytes("hits"),1L);
System.out.println(cnt1);
long cnt2=table.incrementColumnValue(Bytes.toBytes("20150105"),Bytes.toBytes("daily"),Bytes.toBytes("hits"),1);
System.out.println(cnt2);
long current=table.incrementColumnValue(Bytes.toBytes("20150105"),Bytes.toBytes("daily"),Bytes.toBytes("hits"),0);
System.out.println(current);
long cnt3=table.incrementColumnValue(Bytes.toBytes("20150105"),Bytes.toBytes("daily"),Bytes.toBytes("hits"),-1);
System.out.println(cnt3);
table.close();
connection.close();
}
}
/**
1
2
2
1
**/

复合计数器:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException; /**
* 复合计数器
* similarface
* similarface@outlook.com
*/
public class MultipleCounter {
public static void main(String args[]) throws IOException{
Configuration configuration = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("counters"));
Increment increment1 = new Increment(Bytes.toBytes("20160101"));
increment1.addColumn(Bytes.toBytes("daily"),Bytes.toBytes("clicks"),1);
increment1.addColumn(Bytes.toBytes("daily"),Bytes.toBytes("hits"),1);
increment1.addColumn(Bytes.toBytes("weekly"),Bytes.toBytes("clicks"),10);
increment1.addColumn(Bytes.toBytes("weekly"),Bytes.toBytes("hits"),10); Result result = table.increment(increment1);
for(Cell cell:result.rawCells()){
System.out.println("Cell: " + cell +
" Value: " + Bytes.toLong(cell.getValueArray(), cell.getValueOffset(),cell.getValueLength()));
} Increment increment2 = new Increment(Bytes.toBytes("20160101"));
increment2.addColumn(Bytes.toBytes("daily"),Bytes.toBytes("clicks"), 5);
increment2.addColumn(Bytes.toBytes("daily"),Bytes.toBytes("hits"), 1);
increment2.addColumn(Bytes.toBytes("weekly"),Bytes.toBytes("clicks"), 0);
increment2.addColumn(Bytes.toBytes("weekly"),Bytes.toBytes("hits"), -5);
Result result2 = table.increment(increment2);
for (Cell cell : result2.rawCells()) {
System.out.println("Cell: " + cell +
" Value: " + Bytes.toLong(cell.getValueArray(),
cell.getValueOffset(), cell.getValueLength()));
} table.close();
connection.close();
}
}
/**
Cell: 20160101/daily:clicks/1473057324875/Put/vlen=8/seqid=0 Value: 1
Cell: 20160101/daily:hits/1473057324875/Put/vlen=8/seqid=0 Value: 1
Cell: 20160101/weekly:clicks/1473057324875/Put/vlen=8/seqid=0 Value: 10
Cell: 20160101/weekly:hits/1473057324875/Put/vlen=8/seqid=0 Value: 10
Cell: 20160101/daily:clicks/1473057324886/Put/vlen=8/seqid=0 Value: 6
Cell: 20160101/daily:hits/1473057324886/Put/vlen=8/seqid=0 Value: 2
Cell: 20160101/weekly:clicks/1473057324886/Put/vlen=8/seqid=0 Value: 10
Cell: 20160101/weekly:hits/1473057324886/Put/vlen=8/seqid=0 Value: 5
**/

  

  

HBase之计数器的更多相关文章

  1. HBase使用场景和成功案例 (转)

    HBase 使用场景和成功案例 有时候了解软件产品的最好方法是看看它是怎么用的.它可以解决什么问题和这些解决方案如何适用于大型应用架构,能够告诉你很多.因为HBase有许多公开的产品部署,我们正好可以 ...

  2. 8.HBase In Action 第一章-HBase简介(1.2.2 捕获增量数据)

    Data often trickles in and is added to an existing data store for further usage, such as analytics, ...

  3. HBase使用场景和成功案例

    1 典型互联网搜索问题:BigTable发明的原因 搜索使用场景 1) 爬虫持续不断地抓取新页面,这些页面每页一行地存储到HBase里. 2 )MapReduce计算作业运行在整张表上,生成索引,为网 ...

  4. HBase 使用场景和成功案例

    有时候了解软件产品的最好方法是看看它是怎么用的.它可以解决什么问题和这些解决方案如何适用于大型应用架构,能够告诉你很多.因为HBase有许多公开的产品部署,我们正好可以这么做.本章节将详细介绍一些人们 ...

  5. Storm+HBase实时实践

    1.HBase Increment计数器 hbase counter的原理: read+count+write,正好完成,就是讲key的value读出,若存在,则完成累加,再写入,若不存在,则按&qu ...

  6. hbase之认识

    进入HBase客户端命令操作界面    $ bin/hbase shell 查看帮助命令        hbase(main):001:0> help 查看当前数据库中有哪些表        h ...

  7. HBase操作(Shell与Java API)

    版权声明:本文为博主原创文章,未经博主允许不得转载.     转: http://blog.csdn.net/u013980127/article/details/52443155 下面代码在Hado ...

  8. 通过HBase API进行开发

    http://www.cnblogs.com/netbloomy/p/6683509.html 一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台 ...

  9. 2、通过HBase API进行开发

    一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台机器上找到HBase的安装目录,到lib目录下下载HBase需要的jar包,然后再到conf目录 ...

随机推荐

  1. WordPress基础:极简安装教程

    1.下载WordPress 2.将解压后的文件夹,放到网站根目录,并重命名为你喜欢的目录如:w, 3.重命名文件wp-config-sample.php 为 wp-config.php,并进行配置 4 ...

  2. Geolocation

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. [转]C++11 多线程

    转载自:http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438288.html C++11开始支持多线程编程,之前多线程编程都需要系统的支持, ...

  4. DuiLib学习笔记3——颜色探究

    在前面两篇日志已经能使用xml了.今天准备好好的折腾一番,结果在颜色上却掉坑里了. 起初我在ps里取颜色为0104ff 这里01为R,04为G,ff为B 在控件的属性里有这样一个属性bkcolor=& ...

  5. 7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母

    echo $a[0]; echo $a{0}; echo chr(ord($a));//先输出$a字符串里的第一个字符的ASCII值 再从指定的 ASCII 值返回字符.

  6. paper 101:图像融合算法及视觉艺术应用

    1:基于泊松方程的图像融合方法,利用偏微分方程实现了不同图像上区域的无缝融合.比较经典的文章: P. Pérez, M. Gangnet, A. Blake. Poisson image editin ...

  7. java 读取excel poi 和cell 方法

    http://poi.apache.org/spreadsheet/quick-guide.html http://www.aspose.com/docs/display/cellsjava/Eval ...

  8. 03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标:    1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程 2. 以译码器为例学会简单组合逻辑电路设计 实验平台:无 实验原理: 组合逻辑, ...

  9. linux bash快捷键

    bash快捷键 CTRL+F 光标向前移动一个字母 CTRL+B 光标向后移动一个字母 CTRL+A HOME CTRL+E END

  10. 初试“七牛云”--零基础运用七牛云配合UEditor实现图片的上传和浏览(.NET篇)

    (注册和建立存储空间就不介绍了,网上一把一把的资料,自己试着点点也能明白) 作为一个成熟的菜鸟,如果遇到一个新问题,第一步当然是先百度一下... 看了N个关于七牛云的使用的帖子,表示还是蒙圈的,看懂了 ...