美文网首页
HBase的API操作

HBase的API操作

作者: 羋学僧 | 来源:发表于2020-08-23 17:13 被阅读0次

HBase的API操作

Java API

1、HBaseConfiguration:封装了hbase集群所有的配置信息(最终代码运行所需要的各种环境)

2、HBaseAdmin:HBase系统管理员的角色,对数据表进行操作或者管理的一些方法。

3、HTable:封装了整个表的所有的信息(表名,列簇的信息),提供了操作该表数据所欲的业务方法。

4、HTableDescriptor:所有列簇的信息(一到多个HColumnDescriptor)

5、HColumnDescriptor:封装一个列簇的信息

6、Cell:封装了Column的所有的信息:Rowkey、qualifier、value、时间戳

7、Put:插入操作所封装的必要的信息

8、Get:封装查询条件,table.get(Get get),返回一个Result

9、Delete:删除数据封装的所有的必要数据信息。

10、Result:封装了一个rowkey所对应的所有的数据信息

11、ResultScanner:封装了多个Result的结果集。

12、Scan: 封装查询信息,很get有一点不同,Scan可以设置Filter

导入Maven依赖

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

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

    </dependencies>

代码

HBaseOperate.java


  //获取Configuration对象
    public static Configuration conf;
    static{
        //使用HBaseConfiguration的单例方法实例化
        //HBaseConfiguration:封装了hbase集群所有的配置信息(最终代码运行所需要的各种环境)
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "bigdata02:2181,bigdata03:2181,bigdata04:2181,bigdata04:2181");
    }

1、判断表是否存在

    //1、判断表是否存在
    public static boolean isTableExist(String tableName) throws Exception{
        //在HBase中管理、访问表需要先创建HBaseAdmin对象
        //新方法
        //Connection connection = ConnectionFactory.createConnection(conf);
        //HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
        //老方法简单
        //HBaseAdmin:HBase系统管理员的角色,对数据表进行操作或者管理的一些方法。
        HBaseAdmin admin = new HBaseAdmin(conf);
        return admin.tableExists(tableName);
    }
System.out.println(isTableExist("student"));

2、创建表

    //2、创建表  ,String... columnFamily 是不定长参数,注意理解
    public static void createTable(String tableName, String... columnFamily) throws Exception{
        HBaseAdmin admin = new HBaseAdmin(conf);
        //判断表是否存在
        if(isTableExist(tableName)){
            System.out.println("table: " + tableName + "已存在");
        }else{
            //创建表属性对象,表名需要转字节类型
            //HTableDescriptor:所有列簇的信息(一到多个HColumnDescriptor)
            HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
            //创建多个列族
            for(String cf : columnFamily){
                descriptor.addFamily(new HColumnDescriptor(cf));
            }
            //根据对表的配置,创建表
            admin.createTable(descriptor);
            System.out.println("table: " + tableName + "创建成功!");
        }
    }
createTable("student2","info");

3、删除表

    //3、删除表
    public static void dropTable(String tableName) throws Exception{
        HBaseAdmin admin = new HBaseAdmin(conf);
        if(isTableExist(tableName)){
            admin.disableTable(tableName);
            admin.deleteTable(tableName);
            System.out.println("table: " + tableName + "删除成功");
        }else{
            System.out.println("table: " + tableName + "不存在");
        }
    }
dropTable("student");

4、向表中插入数据

    //4、向表中插入数据
    public static void addData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{
        //创建HTable对象
        HTable hTable = new HTable(conf, tableName);
        //向表中插入数据
        Put put = new Put(Bytes.toBytes(rowKey));
        //向Put对象中组装数据
        put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
        hTable.put(put);
        hTable.close();
        System.out.println("恭喜呀,插入数据成功啦");
    }
addData("student2", "002", "info", "name", "mixiaomi");//注意增加数据,存在就是修改,不存在就是增加

addData("student2", "002", "info", "name", "mixiaomi");//注意增加数据,存在就是修改,不存在就是增加
addData("student2", "001", "info", "age", "30");
addData("student2", "001", "info", "school", "BUPT");

5、获取所有数据,也就是获取所有行

    //5、获取所有数据,也就是获取所有行
    public static void getAllData(String tableName) throws IOException{
        //HTable:封装了整个表的所有的信息(表名,列簇的信息),提供了操作该表数据所有的业务方法。
        HTable hTable = new HTable(conf, tableName);
        //得到用于扫描region的对象scan
        //Scan: 封装查询信息,很get有一点不同,Scan可以设置Filter
        Scan scan = new Scan();
        //使用HTable得到resultcanner实现类的对象
        ResultScanner resultScanner = hTable.getScanner(scan);
        for(Result result : resultScanner){
            //Cell:封装了Column的所有的信息:Rowkey、qualifier、value、时间戳
            Cell[] cells = result.rawCells();
            for(Cell cell : cells){
                System.out.println("行键: " + Bytes.toString(CellUtil.cloneRow(cell)));
                System.out.println("列簇: " + Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println("列: " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println("值: " + Bytes.toString(CellUtil.cloneValue(cell)));
                System.out.println();
            }
        }
    }
getAllData("student2");

6、获取某行数据

    //6、获取某行数据
    public static void getRowData(String tableName, String rowKey) throws IOException{
        HTable table = new HTable(conf, tableName);
        Get get = new Get(Bytes.toBytes(rowKey));
        Result result = table.get(get);
        //循环获取所有信息
        for(Cell cell : result.rawCells()){
            System.out.println("行键: " + Bytes.toString(result.getRow()));
            System.out.println("列簇: " + Bytes.toString(CellUtil.cloneFamily(cell)));
            System.out.println("列: " + Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("值: " + Bytes.toString(CellUtil.cloneValue(cell)));
            System.out.println("时间戳: " + cell.getTimestamp());
        }
    }
getRowData("student2","001");

7、获取某行指定的数据,比如指定某个列簇的某个列限定符

    //7、获取某行指定的数据,比如指定某个列簇的某个列限定符
    public static void getRowQualifierData(String tableName, String rowKey, String family, String qualifier) throws IOException{
        HTable table = new HTable(conf, tableName);
        Get get = new Get(Bytes.toBytes(rowKey));
        get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
        Result result = table.get(get);
        //循环获取所有信息,也可以单独打印自己需要的字段即可,这个一般根据业务需求修改。
        for(Cell cell : result.rawCells()){
            System.out.println("行键:" + Bytes.toString(result.getRow()));
            System.out.println("列簇" + Bytes.toString(CellUtil.cloneFamily(cell)));
            System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
        }
    }
getRowQualifierData("student2", "001", "info", "school");

8、删除单行或多行数据

    //8、删除单行或多行数据
    public static void deleteRowsData(String tableName, String... rows) throws IOException{
        HTable hTable = new HTable(conf, tableName);
        List<Delete> deleteList = new ArrayList<Delete>();
        //循环
        for(String row : rows){
            Delete delete = new Delete(Bytes.toBytes(row));
            deleteList.add(delete);
        }
        hTable.delete(deleteList);
        hTable.close();
    }
deleteRowsData("student2", "002");

相关文章

  • Spark&Hbase操作

    HBase 新版 API 进行 CRUD 基本操作配置环境 Hbase基本操作新版 API 中加入了 Connec...

  • HBase的API操作

    HBase的API操作 Java API 1、HBaseConfiguration:封装了hbase集群所有的配置...

  • HBase客户端API-Batch操作

    上一篇博客说了使用 HBase 的客户端 API 来操作操作 HBase 表中记录,今天我们看看怎样通过 API ...

  • 为什么选择 Spring data hadoop

    hbase 常见的操作方式有以下三种: Native Api 原生 api 操作繁琐,就像用 JDBC 操作关系型...

  • Hbase Scan的重要参数

    Scan是操作Hbase中非常常用的一个操作,虽然前面的Hbase API操作简单的介绍了Scan的操作,但不够详...

  • HBase Scan的重要参数

    Scan是操作Hbase中非常常用的一个操作,虽然前面的Hbase API操作简单的介绍了Scan的操作,但不够详...

  • HBase客户端API-表操作

    上一篇博客说了使用 HBase 的客户端 API 来操作管理 HBase 中的表,今天我们看看怎样通过 API 来...

  • HBaseAPI应用与优化

    HBase API 客户端操作 HBaseAPI 客户端操作 代码: Hbase协处理器 协处理器概述 官方地址[...

  • HBase客户端API-表管理

    上一篇博客说了怎样搭建HBase环境,今天说说怎样使用 HBase 的客户端 API 来操作 HBase 中的数据...

  • Spark项目案例实战和分布式部署

    前面讲到Hbase的时候可以通过Java API的方式操作Hbase数据库,由于Java和Scala可以互相调用,...

网友评论

      本文标题:HBase的API操作

      本文链接:https://www.haomeiwen.com/subject/vqoijktx.html