博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hbase 计数器
阅读量:2430 次
发布时间:2019-05-10

本文共 3127 字,大约阅读时间需要 10 分钟。

实验环境

hadoop版本:2.6.5master:192.168.0.160slave1:192.168.0.161hbase版本:1.2.6

计数器

计数器,见名知意它的作用就是计数,一般用于实时统计。比如广告点击量等。

Hbase中也提供了计数器的功能。它能高效的应对高并发的场景。同时保证原子性。
Hbase也有另外一种机制可以将列当作计数器。否则,如果用户需要对一行数据加锁,然后读取数据,再对当前数据做加法,最后回写Hbase并释放该锁。这样做可能做会导致大量的资源竞争问题。

使用

  • 创建表

    hbase(main):005:0> create 'ns2:t1', 'f1'0 row(s) in 1.3690 seconds=> Hbase::Table - ns2:t1
  • 增加计数

    hbase(main):010:0> incr 'ns2:t1', '0001', 'f1:count'COUNTER VALUE = 10 row(s) in 0.1770 seconds
  • 获取计数值

    hbase(main):002:0> get_counter 'ns2:t1', '0001', 'f1:count'COUNTER VALUE = 1

代码示例

package com.tongfang.learn.hbase;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.util.Bytes;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;public class HbaseCounterTest {
private final static String TABLE_NAME= "ns2:t1"; private final static String COLUMN_FAMILY = "f1"; private final static String ROW_NAME = "0001"; private final static String COLUMN1 = "counter1"; private final static String COLUMN2 = "counter2"; private Connection conn; @Before public void iniConn() throws Exception { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.0.161"); conf.set("hbase.zookeeper.property.clientPort","2181"); conn = ConnectionFactory.createConnection(conf); } /** * 单计数器 * @throws IOException */ @Test public void singleCounterTest() throws IOException { Table t = conn.getTable(TableName.valueOf(TABLE_NAME)); long counter1 = t.incrementColumnValue(Bytes.toBytes(ROW_NAME), Bytes.toBytes(COLUMN_FAMILY), Bytes.toBytes(COLUMN1), 1); // 一次增加1 System.out.println("counter1 = " + counter1); } /** * 多计数器 * @throws IOException */ @Test public void MulticounterTest() throws IOException { Table t = conn.getTable(TableName.valueOf(TABLE_NAME)); Increment incr = new Increment(Bytes.toBytes(ROW_NAME)); incr.addColumn(Bytes.toBytes(COLUMN_FAMILY), Bytes.toBytes(COLUMN1), 1); incr.addColumn(Bytes.toBytes(COLUMN_FAMILY), Bytes.toBytes(COLUMN2), 2); t.increment(incr); } @After public void closeConn() throws IOException { conn.close(); }}

注意:程序运行前,需要在client主机的hosts文件中指定master和slave1的ip地址,具体根据hadoop集群配置的主机名设置。

C:\Windows\System32\drivers\etc\hosts192.168.0.160 master192.168.0.161 slave1

运行结果:

hbase(main):024:0> scan 'ns2:t1'ROW                        COLUMN+CELL                                                                0001                      column=f1:counter1, timestamp=1532420447441, value=\x00\x00\x00\x00\x00\x0                           0\x00\x06                                                                  0001                      column=f1:counter2, timestamp=1532420447441, value=\x00\x00\x00\x00\x00\x0                           0\x00\x06                                                                 1 row(s) in 0.0310 seconds

转载地址:http://izjmb.baihongyu.com/

你可能感兴趣的文章
Kubernetes 调度器实现初探
查看>>
边缘计算精华问答 | 边缘计算有哪些应用场景?
查看>>
要闻君说:Synergy Research Group首发云基础设施数据,腾讯云v5一把;京东物流发力5G;厉害!阿里挖走贾扬清...
查看>>
数据中台精华问答 | 数据中台和传统数仓的区别是什么?
查看>>
这是一则计算机视觉顶级会议CVPR与腾讯的爆闻,啥?
查看>>
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
【C语言】C语言中常用函数源代码【strncpy ,strncat ,strncmp】
查看>>
【Java】【算法练习】题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是输出yes,不是输出no,数组任意两个数字不相同。
查看>>
【Java】给定一个二叉树和其中的一个节点,请找出中序遍历的下一个节点且返回, 注意:树中的节点不仅包含左右子节点,同时包含父节点的指针。
查看>>
【Java】【多线程】—— 多线程篇
查看>>
【计算机网络】—— TCP/IP篇
查看>>
【Java】【算法】——算法篇
查看>>
【Java】【数据库】知识重点——数据库篇
查看>>
【Java】知识重点——消息队列篇
查看>>
【Java】学习总结 —— HashMap之put()方法实现原理
查看>>
【计算机网络】【TCP】如何讲清楚Tcp的三次握手和四次挥手?
查看>>
【Java】-- Java核心知识点总结
查看>>
【数据库】SQL之重点知识点总结
查看>>
【计算机网络】计算机网络知识总结
查看>>
【Java】【Web】JavaWeb相关知识总结 2018-9-17
查看>>