前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HBase快速入门系列(6) | Hbase简单的API操作

HBase快速入门系列(6) | Hbase简单的API操作

作者头像
不温卜火
发布2020-10-28 16:46:48
5690
发布2020-10-28 16:46:48
举报
文章被收录于专栏:不温卜火

1. 添加依赖

代码语言:javascript
复制
    <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>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.8</version>
        <scope>system</scope>
        <systemPath>D:/java/jdk-1.8.0/lib/tools.jar</systemPath>
    </dependency>
    </dependencies>

2. HBaseAPI

  • 1. 获取Configuration对象
代码语言:javascript
复制
/**
 * @author 卜温不火
 * @create 2020-05-12 10:48
 */
    private static Connection connection = null;

    static{

        try {
        Configuration conf = HBaseConfiguration.create();
        //使用HBaseConfiguration的单例方法实例化
        conf.set("hbase.zookeeper.quorum", "hadoop002,hadoop003,hadoop004");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        connection= ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
  • 2. 判断表是否存在
代码语言:javascript
复制
    // 判断表是否存在
    public static boolean tableExists(String tableName) throws IOException{

        Admin admin = connection.getAdmin();

        try {
            return admin.tableExists(TableName.valueOf(tableName));
        }finally {
            admin.close();
        }

    }
  • 3. 创建表
代码语言:javascript
复制
 // 创建ddl
    public static void creatTable(String tableName,String... families)throws IOException {

        Admin admin = connection.getAdmin();

        try {
            if (admin.tableExists(TableName.valueOf(tableName))){
                System.out.println("表:"+tableName+" 已经存在");
                return;
            }

            HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName));

            for (String family : families){
                HColumnDescriptor familyDesc = new HColumnDescriptor(family);
                desc.addFamily(familyDesc);
            }

            admin.createTable(desc);
        }finally {
            admin.close();
        }

    }
  • 4. 删除表
代码语言:javascript
复制
 // 删除表
    public static void dropTable(String tableName) throws IOException{

        Admin admin = connection.getAdmin();

        try{
            if(!admin.tableExists(TableName.valueOf(tableName))){
                System.out.println("表" + tableName + "删除成功!");
            }else{
                System.out.println("表" + tableName + "不存在!");
            }
            admin.disableTable(TableName.valueOf(tableName));

            admin.deleteTable(TableName.valueOf(tableName));
        }finally {
            admin.close();
        }

    }
  • 5. 向表中插入数据
代码语言:javascript
复制
   // 往表中插入数据
    public static void putCell(String tableName,String rowKey,String family,String column,String value) throws IOException {

        if(!tableExists(tableName)){
            return;
        }
        Table table = connection.getTable(TableName.valueOf(tableName));
        try{


            Put put = new Put(Bytes.toBytes(rowKey));

            put.addColumn(Bytes.toBytes(family),Bytes.toBytes(column),Bytes.toBytes(value));

            table.put(put);
        }finally {
            table.close();
        }

    }
  • 6. 删除数据

①删除某一行

代码语言:javascript
复制
    // 1. 删除某一行
    public static void deleteRow(String tableName,String rowKey) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Delete delete = new Delete(Bytes.toBytes(rowKey));

        table.delete(delete);

        table.close();
    }

②删除整个列组

代码语言:javascript
复制
   // 2. 删除整个列组
    public static void deleteFamily(String tableName,String rowKey,String family) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Delete delete = new Delete(Bytes.toBytes(rowKey));

        delete.addFamily(Bytes.toBytes(family));

        table.delete(delete);

        table.close();
    }

③删除某一列

代码语言:javascript
复制
// 删除所有版本
 public static void deleteCell(String tableName,String rowKey,String family,String column) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Delete delete = new Delete(Bytes.toBytes(rowKey));

        delete.addColumn(Bytes.toBytes(family),Bytes.toBytes(column));

        table.delete(delete);

        table.close();
    }
 		// 测试   
        public static void main(String[] args)throws  IOException{

        putCell("student","1003","info", "name","buwen");
        putCell("student","1003","info", "name","bubuhuo");

        deleteCell("student","1003","info", "name");
    }
1
1
2
2

我们可以看到删除了最新的一条

代码语言:javascript
复制
// 删除最新版本
 public static void deleteCells(String tableName,String rowKey,String family,String column) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Delete delete = new Delete(Bytes.toBytes(rowKey));

        delete.addColumns(Bytes.toBytes(family),Bytes.toBytes(column));

        table.delete(delete);

        table.close();
    }
    
    //  测试
        public static void main(String[] args)throws  IOException{

        putCell("student","1003","info", "name","buwen");
        putCell("student","1003","info", "name","bubuhuo");

        deleteCells("student","1003","info", "name");
    }
3
3
4
4
  • 7. 查看一行数据
代码语言:javascript
复制
    // 查找一行数据
    public static void getRow(String tableName,String rowKey) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Get get = new Get(Bytes.toBytes(rowKey));

        Result result = table.get(get);

        Cell[] cells = result.rawCells();

        for (Cell cell : cells){

            byte[] columnBytes = CellUtil.cloneQualifier(cell);

            String columnStr = Bytes.toString(columnBytes);

            byte[] valueBytes = CellUtil.cloneValue(cell);

            String valueStr = Bytes.toString(valueBytes);

            System.out.println(columnStr + ":" + valueStr);
        }
        table.close();
    }

    public static void main(String[] args)throws  IOException{

        putCell("student","1003","info", "age","18");
        putCell("student","1003","info", "gender","boy");

//        deleteCells("student","1003","info", "name");
        getRow("student","1003");
    }
5
5
  • 8. 查看指定范围内数据
代码语言:javascript
复制
    public static void getRows(String tableName,String startRow,String stopRow) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(stopRow));

        ResultScanner scanner = table.getScanner(scan);

        for (Result result : scanner) {

            for (Cell cell : result.rawCells()) {

                String rowKey = Bytes.toString(CellUtil.cloneRow(cell));
                String column = Bytes.toString(CellUtil.cloneQualifier(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));

                System.out.println(rowKey + "-" + column + ":" + value);
            }
        }

        scanner.close();
        table.close();

    }

    public static void main(String[] args)throws  IOException{
        getRows("student","1002","1003!");

    }
6
6
  • 9. 过滤(单个)
代码语言:javascript
复制
    public static  void getRowsByColumn(String tableName,String family,String column, String value) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Scan scan = new Scan();

        SingleColumnValueExcludeFilter filter = new SingleColumnValueExcludeFilter(Bytes.toBytes(family), Bytes.toBytes(column), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(value));
		filter.setFilterIfMissing(true);  // 过滤器
        scan.setFilter(filter);

        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {

            for (Cell cell : result.rawCells()) {

                String rowKey = Bytes.toString(CellUtil.cloneRow(cell));
                String columnStr = Bytes.toString(CellUtil.cloneQualifier(cell));
                String valueStr = Bytes.toString(CellUtil.cloneValue(cell));

                System.out.println(rowKey + "-" + columnStr + ":" + valueStr);
            }
        }

        scanner.close();
        table.close();

    }

    public static void main(String[] args) throws IOException {
        getRowsByColumn("student","info","age","18");

    }

}
  • 10. 过滤(多个)
代码语言:javascript
复制
    //过滤(多个)
    public static  void getRowsByColumns(String tableName, String family, Map<String,String> map) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Scan scan = new Scan();

        SingleColumnValueExcludeFilter filter1 = new SingleColumnValueExcludeFilter(Bytes.toBytes(family), Bytes.toBytes(map.keySet().toArray()[0].toString()), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(map.get(map.keySet().toArray()[0].toString())));
        filter1.setFilterIfMissing(true);

        SingleColumnValueExcludeFilter filter2 = new SingleColumnValueExcludeFilter(Bytes.toBytes(family), Bytes.toBytes(map.keySet().toArray()[1].toString()), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(map.get(map.keySet().toArray()[1].toString())));
        filter2.setFilterIfMissing(true);

        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

        filterList.addFilter(filter1);
        filterList.addFilter(filter2);

        scan.setFilter(filterList);

        // da yin
        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {

            for (Cell cell : result.rawCells()) {

                String rowKey = Bytes.toString(CellUtil.cloneRow(cell));
                String columnStr = Bytes.toString(CellUtil.cloneQualifier(cell));
                String valueStr = Bytes.toString(CellUtil.cloneValue(cell));

                System.out.println(rowKey + "-" + columnStr + ":" + valueStr);
            }
        }

        scanner.close();
        table.close();

    }

    public static void main(String[] args) throws IOException {

//        putCell("student","1005","info", "name","lixuefang");
//        putCell("student","1005","info", "gender","girl");
//        putCell("student","1005","info", "age","18");

        HashMap<String,String>map = new HashMap<String, String>();

        map.put("age","18");
        map.put("gender","girl");

        getRowsByColumns("student","info",map);

    }
7
7

  本次的分享就到这里了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 添加依赖
  • 2. HBaseAPI
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档