一、计数器
在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"),
在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"),