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的访问编程。


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

 <dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
<span style="font-family: Arial, Helvetica, sans-serif;">    <version>2.2.0</version></span></span>

</dependency>

 <dependency> 

<groupId>org.apache.hadoop</groupId> 

<artifactId>hadoop-annotations</artifactId> 

<version>2.2.0</version> 

</dependency> 

<dependency> 

<groupId>org.apache.hbase</groupId> 

<artifactId>hbase</artifactId> 

<version>0.94.18-hadoop2</version> 

</dependency>

 接下来写的时候少啥就是一顿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服务器端配置保持一致
<configuration>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>server1,server2,server3</value>
    </property>

    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase_path</value>
    </property>

    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
</configuration>
两种方式配置效果是一样的,这样拿到了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()));
                }
            }
差不多就这些基本操作,还有建表、删表等,都类似。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值