hadoop(17)--Hbase的java Demo

今天就简单的介绍一下Hbase的java的api,有创建表,插入数据,查询数据。
先进入shell控制台,看看现有几个表:

《hadoop(17)--Hbase的java Demo》 image.png

一个rr表,一个user表

创建表:

前提要将对应hbase的lib包下的jar,拷贝到项目中


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.TableName;
import org.apache.hadoop.hbase.client.HBaseAdmin;

import java.io.IOException;

/**
 * 测试Hbase
 *
 * @author songlj
 * @date 2018/5/24 22:50
 */
public class HbaseDao {
    public static void main(String[] args) throws IOException {
        Configuration conf =  HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");

        //ddl的操作对象
        HBaseAdmin admin = new HBaseAdmin(conf);

        //表名
        TableName name = TableName.valueOf("user1");


        HTableDescriptor desc = new HTableDescriptor(name);


        //列族
        HColumnDescriptor base_info = new HColumnDescriptor("base_info");
        HColumnDescriptor extra_info = new HColumnDescriptor("extra_info");
        //最大保存的历史版本个数
        base_info.setMaxVersions(5);

        desc.addFamily(base_info);
        desc.addFamily(extra_info);

        //创建表
        admin.createTable(desc);
        admin.close();
    }
}

运行:

《hadoop(17)--Hbase的java Demo》 image.png

结果:

《hadoop(17)--Hbase的java Demo》 image.png

添加数据

 @Test
    public void insertTest() throws Exception{

        Configuration conf =  HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");

        //获取dml客户端对象
        HTable user1 = new HTable(conf, "user1");

        //给列族中放列以及列值  k_v      hbase存储的是bytes,而字节的数组
        Put name = new Put(Bytes.toBytes("rk0001"));
        name.add(Bytes.toBytes("base_info"), Bytes.toBytes("name"), Bytes.toBytes("songlj"));

        Put age = new Put(Bytes.toBytes("rk0001"));
        age.add(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes(18));

        ArrayList<Put> puts = new ArrayList<>();
        puts.add(name);
        puts.add(age);

        user1.put(puts);
        user1.close();
    }

运行

《hadoop(17)--Hbase的java Demo》 image.png

结果

《hadoop(17)--Hbase的java Demo》 image.png

查询数据

    @Test
    public void testGet() throws Exception{
        Configuration conf =  HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");
        HTable table = new HTable(conf, "user1");
        Get get = new Get(Bytes.toBytes("rk0001"));
        get.setMaxVersions(5);
        Result result = table.get(get);
        List<Cell> cells = result.listCells();

//          result.getValue(family, qualifier);  可以从result中直接取出一个特定的value

        //遍历出result中所有的键值对
        for(KeyValue kv : result.list()){
            String family = new String(kv.getFamily());
            System.out.println(family);
            String qualifier = new String(kv.getQualifier());
            System.out.println(qualifier);
            System.out.println(new String(kv.getValue()));


        }
        table.close();
    }

运行结果:

《hadoop(17)--Hbase的java Demo》 image.png

这里就介绍到这里,还有scan,各种过滤器,就不在这里赘述了,实际的应用中用到了可以去查看一下,很简单,懂得了hbase java api的设计技巧,能够做到举一反三。

望指正,不吝赐教

点赞