HBase JavaAPI

Posted 舞凍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase JavaAPI相关的知识,希望对你有一定的参考价值。

一.概念

  1.对HBase JavaAPI的概述:

    01.hbase使用java语言编写,自然支持java编程

    02.支持CRUD操作

    03.JavaAPI包含了所有的hbase的shell,甚至比这个还要多

    04.JavaAPI是访问hbase的最快的方式

  2.api

    01.Configuration:Configuration对象包含了连接到hbase的服务的信息;zookeeper的位置,连接时间等

    02.HbaseConfiguration.create():从classPath下加载hbase-default.xml和hbase-sitl.xml文件,所以需要将hbase-site.xml放入到classPath下。hbase-sitl.xml将覆盖hbase-default.xml的同名属性

    03.HTable句柄:为Configuration提供对象和访问table的名称

    

HTable table = new HTable(con, tableName);

  一个table对应一个句柄:

    001.提供了CRUD操作,且支持批处理

    002.设计简单,使用方便

    003.提供行级事务

    004.不支持1多行事务或者表级别的事务

    005.并发读,顺序写

    006.严格的行一致性

    007.创建句柄代价很大,创建一次后尽可能复用

    008.如果需要创建多个句柄,使用HtablePoll

    009.HTable并非线程安全的,一个线程创建一个即可,但性能较高

二.代码环节

  1.需要下面的pom节点

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>1.3.1</version>
        </dependency>

  2.将虚拟机中的hdfs-sitl.xml和hbase-sitl.xml文件复制到项目中的resources文件下

  3.修改window下的hosts文件,路径是:C:\\Windows\\System32\\drivers\\etc\\hosts

  4.代码

public class HBaseJavaAPI {
    public static void main(String[]args) throws Exception{
        //createTable();
        //addData();
        //getAllData();
        //deleteByRowKey();
        //getByRowKey();
        //deleteQualifier();
        //deleteTable();
    }
    
     /**
      * 1.创建表
      */
    public static void createTable() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        
        /**
         * 2.创建HBaseAdmin对象,此对象包含了创建表,创建列族,检索表是否存在,修改表和列族结构,删除表等功能
         * HBaseAdmin对象的生命周期不宜太长
         */
        HBaseAdmin hBaseAdmin=new HBaseAdmin(con);
        //3.判断表是否存在
        if(hBaseAdmin.tableExists("hbase_demo_api")) {
            System.out.println("表已存在,不许重复创建");
        }else {
            //4.创建表的描述对象
            HTableDescriptor tableDescriptor=new HTableDescriptor("hbase_demo_api");
            tableDescriptor.addFamily(new HColumnDescriptor("grade"));
            tableDescriptor.addFamily(new HColumnDescriptor("course"));
            hBaseAdmin.createTable(tableDescriptor);
            System.out.println("表创建成功!");
        }
        hBaseAdmin.close();
    }
    
    /**
      * 2.新增数据
      */
    public static void addData() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HTable句柄
        HTable htable=new HTable(con, "hbase_demo_api");
        //3.创建put对象
        Put put=new Put("class1".getBytes());    //class1就是rowkey
        put.addColumn("course".getBytes(), "sql".getBytes(), "90".getBytes());
        put.addColumn("course".getBytes(), "java".getBytes(), "89".getBytes());
        put.addColumn("grade".getBytes(), "".getBytes(), "c1".getBytes());
        //4.向表中插入数据
        htable.put(put);
        System.out.println("插入成功!");
        //5.关闭HTable对象
        htable.close();
    }
    /**
      * 3.查询全部数据
      */
    public static void getAllData() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HTable句柄
        HTable htable=new HTable(con, "hbase_demo_api");
        //3.使用扫描器去扫描表
        ResultScanner scanner = htable.getScanner(new Scan());
        for (Result result: scanner) {
            for (Cell cell: result.rawCells()) {
                System.out.println("RowKey-------"+Bytes.toString(result.getRow()));
                System.out.println("column(列族)-------"+Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println("col(列)-------"+Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println("value(值)-------"+Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        //4.关闭HTable对象
        htable.close();
    }
    /**
      * 4.删除表中指定RowKey的数据
      */
    public static void deleteByRowKey() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HTable句柄
        HTable htable=new HTable(con, "hbase_demo_api");
        //3.创建delete对象
        Delete delete =new Delete(Bytes.toBytes("class1"));
        htable.delete(delete);
        System.out.println("删除成功!");
        //4.关闭HTable对象
        htable.close();
    }
    
    /**
      * 5.获取指定RowKey的数据
      */
    public static void getByRowKey() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HTable句柄
        HTable htable=new HTable(con, "hbase_demo_api");
        //3.创建get对象
        Get get=new Get(Bytes.toBytes("class1"));
        Result result = htable.get(get);
        for (Cell cell : result.rawCells()) {
            System.out.println("RowKey-------"+Bytes.toString(result.getRow()));
            System.out.println("column(列族)-------"+Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("value(值)-------"+Bytes.toString(CellUtil.cloneValue(cell)));

        }
        htable.close();
        
    }
    /**
      * 6.获取指定RowKey的数据
      */
    public static void deleteQualifier() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HTable句柄
        HTable htable=new HTable(con, "hbase_demo_api");
        //3.创建delete对象
        Delete delete=new Delete(Bytes.toBytes("class1"));
        delete.addColumn(Bytes.toBytes("course"), Bytes.toBytes("java"));
        
        htable.delete(delete);
        System.out.println("删除成功!");
        htable.close();
    }
    
    /**
      * 7.删除表
      */
    public static void deleteTable() throws Exception {
        //1.创建一个Configuration对象
        Configuration con = HBaseConfiguration.create();
        //2.创建HAdmin对象
        HBaseAdmin admin=new HBaseAdmin(con);
        //3.先将表禁用
        admin.disableTable("hbase_demo_api");
        //4.删除指定表
        admin.deleteTable("hbase_demo_api");
        System.out.println("删除成功!");
        //5.关闭资源
        admin.close();
    }

  

 

以上是关于HBase JavaAPI的主要内容,如果未能解决你的问题,请参考以下文章

HBase单节点下JavaAPI连接

Hbase-1.2.4 javaAPI实现简单的类CRUD操作

HBase JavaAPI

HBase的JavaAPI

Hbase JavaApi

hbase JavaAPI