Hbase常用操作(增删改查)

[日期:2014-01-03] 来源:Linux社区  作者:net19880504 [字体:  ]
 
 

运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的hbase-0.94.1-security.jar、hbase-0.94.1-security-tests.jar和lib子目录下所有jar 包添加到本工程的Classpath下。

HBase提供了java api来对HBase进行一系列的管理涉及到对表的管理、数据的操作等。常用的API操作有:

1、 对表的创建、删除、显示以及修改等,可以用HBaseAdmin,一旦创建了表,那么可以通过HTable的实例来访问表,每次可以往表里增加数据。

2、 插入数据

创建一个Put对象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put)来提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。

3、 获取数据

要获取数据,使用Get对象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过HTable.get(Get)来调用。

4、 浏览每一行

通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个,通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。Result是一个

KeyValue的链表。

5、 删除

使用Delete来删除记录,通过调用HTable.delete(Delete)来执行删除操作。(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。)

6、 锁

新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。

7、 簇的访问

客户端代码通过ZooKeeper来访问找到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要找到文件hbase-site.xml。

新建一个类:

import java.io.IOException;    
    import java.util.ArrayList;    
    import java.util.List;    
          
    import org.apache.Hadoop.conf.Configuration;    
    import org.apache.hadoop.hbase.HBaseConfiguration;    
    import org.apache.hadoop.hbase.HColumnDescriptor;    
    import org.apache.hadoop.hbase.HTableDescriptor;    
    import org.apache.hadoop.hbase.KeyValue;    
    import org.apache.hadoop.hbase.MasterNotRunningException;    
    import org.apache.hadoop.hbase.ZooKeeperConnectionException;    
    import org.apache.hadoop.hbase.client.Delete;    
    import org.apache.hadoop.hbase.client.Get;    
    import org.apache.hadoop.hbase.client.HBaseAdmin;    
    import org.apache.hadoop.hbase.client.HTable;    
    import org.apache.hadoop.hbase.client.Result;    
    import org.apache.hadoop.hbase.client.ResultScanner;    
    import org.apache.hadoop.hbase.client.Scan;    
    import org.apache.hadoop.hbase.client.Put;    
    import org.apache.hadoop.hbase.util.Bytes;    
          
    public class HBaseTest {      
            
        private static Configuration conf =null;  
        /** 
          * 初始化配置 
        */  
        static {  
            conf = HBaseConfiguration.create();  
        }  
          
        /**  
        * 创建一张表  
        */    
        public static void creatTable(String tableName, String[] familys) throws Exception {    
            HBaseAdmin admin = new HBaseAdmin(conf);    
            if (admin.tableExists(tableName)) {    
                System.out.println("table already exists!");    
            } else {    
                HTableDescriptor tableDesc = new HTableDescriptor(tableName);    
                for(int i=0; i<familys.length; i++){    
                    tableDesc.addFamily(new HColumnDescriptor(familys[i]));    
                }    
                admin.createTable(tableDesc);    
                System.out.println("create table " + tableName + " ok.");    
            }      
        }    
            
        /**  
        * 删除表  
        */    
        public static void deleteTable(String tableName) throws Exception {    
          try {    
              HBaseAdmin admin = new HBaseAdmin(conf);    
              admin.disableTable(tableName);    
              admin.deleteTable(tableName);    
              System.out.println("delete table " + tableName + " ok.");    
          } catch (MasterNotRunningException e) {    
              e.printStackTrace();    
          } catch (ZooKeeperConnectionException e) {    
              e.printStackTrace();    
          }    
        }    
              
        /**  
        * 插入一行记录  
        */    
        public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)    
                throws Exception{    
            try {    
                HTable table = new HTable(conf, tableName);    
                Put put = new Put(Bytes.toBytes(rowKey));    
                put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));    
                table.put(put);    
                System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");    
            } catch (IOException e) {    
                e.printStackTrace();    
            }    
        }    
          
        /**  
        * 删除一行记录  
        */    
        public static void delRecord (String tableName, String rowKey) throws IOException{    
            HTable table = new HTable(conf, tableName);    
            List list = new ArrayList();    
            Delete del = new Delete(rowKey.getBytes());    
            list.add(del);    
            table.delete(list);    
            System.out.println("del recored " + rowKey + " ok.");    
        }    
              
        /**  
        * 查找一行记录  
        */    
        public static void getOneRecord (String tableName, String rowKey) throws IOException{    
            HTable table = new HTable(conf, tableName);    
            Get get = new Get(rowKey.getBytes());    
            Result rs = table.get(get);    
            for(KeyValue kv : rs.raw()){    
                System.out.print(new String(kv.getRow()) + " " );    
                System.out.print(new String(kv.getFamily()) + ":" );    
                System.out.print(new String(kv.getQualifier()) + " " );    
                System.out.print(kv.getTimestamp() + " " );    
                System.out.println(new String(kv.getValue()));    
            }    
        }    
              
        /**  
        * 显示所���数据  
        */    
        public static void getAllRecord (String tableName) {    
            try{    
                HTable table = new HTable(conf, tableName);    
                Scan s = new Scan();    
                ResultScanner ss = table.getScanner(s);    
                for(Result r:ss){    
                    for(KeyValue kv : r.raw()){    
                        System.out.print(new String(kv.getRow()) + " ");    
                        System.out.print(new String(kv.getFamily()) + ":");    
                        System.out.print(new String(kv.getQualifier()) + " ");    
                        System.out.print(kv.getTimestamp() + " ");    
                        System.out.println(new String(kv.getValue()));    
                    }    
                }    
            } catch (IOException e){    
                e.printStackTrace();    
            }    
        }    
            
        public static void  main (String [] agrs) {    
            try {    
                String tablename = "scores";    
                String[] familys = {"grade", "course"};    
                HBaseTest.creatTable(tablename, familys);    
                      
                //add record zkb             hbase shell:  put 'scores','zkb','grade','5'
                HBaseTest.addRecord(tablename,"zkb","grade","","5");

      //hbase shell:  put 'scores','zkb','course','90'
                HBaseTest.addRecord(tablename,"zkb","course","","90");

      //hbase shell:  put 'scores','zkb','course:math','90'
                HBaseTest.addRecord(tablename,"zkb","course","math","97");

      //hbase shell:  put 'scores','zkb','course:art','87'
                HBaseTest.addRecord(tablename,"zkb","course","art","87");    
                //add record  baoniu

      //hbase shell:  put 'scores','baoniu','grade','4'
                HBaseTest.addRecord(tablename,"baoniu","grade","","4");

      //hbase shell:  put 'scores','baoniu','course:math','89'
                HBaseTest.addRecord(tablename,"baoniu","course","math","89");    
                      
                System.out.println("===========get one record========");    
                HBaseTest.getOneRecord(tablename, "zkb");    
                      
                System.out.println("===========show all record========");    
                HBaseTest.getAllRecord(tablename);    
                      
                System.out.println("===========del one record========");    
                HBaseTest.delRecord(tablename, "baoniu");    
                HBaseTest.getAllRecord(tablename);    
                      
                System.out.println("===========show all record========");    
                HBaseTest.getAllRecord(tablename);    
            } catch (Exception e) {    
                e.printStackTrace();    
            }    
        }    
    }

结果显示为:

create table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored baoniu to table scores ok.
insert recored baoniu to table scores ok.
===========get one record========
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========show all record========
baoniu course:math 1345450733333 89
baoniu grade: 1345450733328 4
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========del one record========
del recored baoniu ok.
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========show all record========
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5

HBase 的详细介绍请点这里
HBase 的下载地址请点这里

相关阅读

Hadoop+HBase搭建云存储总结 PDF http://www.linuxidc.com/Linux/2013-05/83844.htm

HBase 结点之间时间不一致造成regionserver启动失败 http://www.linuxidc.com/Linux/2013-06/86655.htm

Hadoop+ZooKeeper+HBase集群配置 http://www.linuxidc.com/Linux/2013-06/86347.htm

Hadoop集群安装&HBase实验环境搭建 http://www.linuxidc.com/Linux/2013-04/83560.htm

基于Hadoop集群的HBase集群的配置 http://www.linuxidc.com/Linux/2013-03/80815.htm

Hadoop安装部署笔记之-HBase完全分布模式安装 http://www.linuxidc.com/Linux/2012-12/76947.htm

单机版搭建HBase环境图文教程详解 http://www.linuxidc.com/Linux/2012-10/72959.htm

Hbase常用操作(增删改查)的更多相关文章

  1. HBASE常用操作增删改查

    http://javacrazyer.iteye.com/blog/1186881 http://www.cnblogs.com/invban/p/5667701.html

  2. python中列表的常用操作增删改查

    1. 列表的概念,列表是一种存储大量数据的存储模型. 2. 列表的特点,列表具有索引的概念,可以通过索引操作列表中的数据.列表中的数据可以进行添加.删除.修改.查询等操作. 3. 列表的基本语法 创建 ...

  3. 【sql server常用操作{增删改查}】

    use DB_x   go   drop database DB_y   create database DB_y --创建数据库   on primary --指定主数据文件   (   name= ...

  4. 完成在本机远程连接HBase进行数据增删改查

    1.进行hbase与本机远程连接测试连接 1.1 修改虚拟机文件hbase-site.xml(cd/usr/local/hbase/conf)文件,把localhost换成你的虚拟机主机名字 1.2修 ...

  5. Android-Sqlite-OOP方式操作增删改查

    之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...

  6. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  7. django模型层之多表操作 增删改查

    多表操作之创建模型 这边以书为中心创建一个模型 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(on ...

  8. Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]

    在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...

  9. Django数据库操作(增删改查)

    Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...

随机推荐

  1. Local Storage

    HTML代码: <ul id="edit" contenteditable="true"> <li>修改我吧,然后刷新页面看看,^_^& ...

  2. CSS float清除浮动

    解决高度塌陷的问题 – 清除浮动 CSS中有个讨论较多的话题就是如何清除浮动,清除浮动其实就一个目的,就是解决高度塌陷的问题.为什么会高度塌陷?什么时候会高度塌陷?塌陷原因是:元素含有浮动属性 – 破 ...

  3. 二叉树的镜像(python)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  4. ffmpeg编码中的二阻塞一延迟

    1. avformat_find_stream_info接口延迟 不论是减少预读的数据量,还是设置flag不写缓存,我这边都不实用,前者有风险,后者会丢帧,可能我还没找到好姿势,记录在此,参考:htt ...

  5. python爬虫相关基础概念

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.但是php在实现爬虫中支持多线程和多进程方面做得不好. 2.java ...

  6. 【收藏】UI自动化测试基本规则与设计模式

    总体规则 所有模块设计均遵循page object结构 用例层:测试人员编写测试用例代码的地方,可以调用page层和封装层. page层:一个页面一个类,包含该页面的业务逻辑封装以及部分控件定义. 封 ...

  7. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  8. TZOJ 1221 Tempter of the Bone(回溯+剪枝)

    描述 The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked i ...

  9. PTA 7-9 旅游规划(SPFA)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  10. swift 关于didSet 和willSet赋值的注意点

    1. 初始化赋值的时候都不会走这个的方法, 需要在创建结构体后或对象后,在赋值,此时才会走这个方法