java操作Hbase--增删查

先了解下Hbase的一些术语:

RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。

Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义

Value(Cell):Byte array,对应column

具体应该类似  rowkey    |      column family               |

                       rowkey1  |    col1:aa     col2:bb        |    

 rowkey1类似于这条记录的主键,col1是这个列族中的一列对应值是aa,col2是另外一个column对应值是bb,他们共同属于一个列族。一个rowkey可以对应有多个列族。 这里简单说一下,具体可看下hbase的概念和原理,下面具体说下java对hbase的访问编程。


最近开始弄这个就是被几个依赖包搞的半天调不通,先贴上。。。。

 
  org.apache.hadoop
  hadoop-common
    2.2.0

  

org.apache.hadoop 

hadoop-annotations 

2.2.0 

 

 

org.apache.hbase 

hbase 

0.94.18-hadoop2 

 接下来写的时候少啥就是一顿import就行了。。。 
  

先是设置下基本的配置,这里有两种方式,一种是直接程序中写如下:

public Configuration conf = null;
conf.set("hbase.zookeeper.quorum", "server1,server2,server3");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("zookeeper.znode.parent", "/hbase_path");//如果有配置的话

另一种就是读取配置文件

conf = HBaseConfiguration.create();
这个函数来读取文件配置,如果是工程项目,他默认找资源目录下的hbase-site.xml这个文件,加载其中配置,与hbase服务器端配置保持一致
 
  


    
        hbase.zookeeper.quorum
        server1,server2,server3
    

    
        zookeeper.session.timeout
        60000
    
    
        zookeeper.znode.parent
        /hbase_path
    

    
        hbase.zookeeper.property.clientPort
        2181
    
两种方式配置效果是一样的,这样拿到了conf就可以进行具体操作了
1、判断表TABLE_NAME是否存在
 
  
            HBaseAdmin hAdmin = new HBaseAdmin(conf);
            System.out.println(hAdmin.tableExists(TABLE_NAME));
2、插入一条数据
HTable table = new HTable(conf, TABLE_NAME1); 
Put put = new Put(Bytes.toBytes(ROW_KEY));//插入一条数据的rowkey为ROW_KEY,必须为bytes形式
put.add(Bytes.toBytes("a"), Bytes.toBytes("a-key"),Bytes.toBytes("a-value"));//插入到列族名为a,列名为a-key,值为a-value
table.put(put);
3、删除数据
 
  
HTable table = new HTable(conf, TABLE_NAME1);//找到要删除数据对应的表
        List list = new ArrayList();
        Delete del1 = new Delete(Bytes.toBytes("112233"));//删除rowkey为112233的这条数据
        Delete del2 = new Delete(Bytes.toBytes("aaaabbbb"));
        list.add(del1);
        list.add(del2);
        table.delete(list);//支持传入list多条删除,添加也是同样支持的
4、查询一条数据
 
  
HTable table = new HTable(conf, TABLE_NAME1);//锁定查询的表
        Get get = new Get(Bytes.toBytes(ROW_KEY1));//锁定查询的rowkey
        Result rs = table.get(get);//一个rowkey对应的可能多条不同列族和列数据
            for (KeyValue kv : rs.raw()) {
                System.out.println(new String(kv.getRow()) + " ");
                System.out.println(new String(kv.getFamily()) + ":");
                System.out.println(new String(kv.getQualifier()) + " ");
                System.out.println(kv.getTimestamp() + " ");
                System.out.println(new String(kv.getValue()));
            }

5、扫描全部数据
 
  
            HTable table = new HTable(conf, TABLE_NAME1);
            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()));
                }
            }
差不多就这些基本操作,还有建表、删表等,都类似。 
  
 
  

你可能感兴趣的:(java操作Hbase--增删查)