Hbese API


public class HBaseTest {

    private static Connection connection;
    private static Admin admin;

    static {
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void close() {
        if (admin != null) {
            try {
                admin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //1.创建命名空间
    private static void createNS(String ns) throws IOException {
        Configuration configuration = new Configuration();
        configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
        HBaseAdmin admin = new HBaseAdmin(configuration);
        NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();
        try {
            admin.createNamespace(namespaceDescriptor);
        } catch (NamespaceExistException e) {
            System.out.println(ns + "命名空间已存在!!!");
        }
        admin.close();
    }

    private static boolean isTableExist(String tableName) throws IOException {
        return admin.tableExists(TableName.valueOf(tableName));
    }
    //建表
    private static void createTable(String tableName, String... cfs) throws IOException {
        if (cfs.length <= 0) {
            System.out.println("请设置列族信息!!!");
            return;
        }

        if (isTableExist(tableName)) {
            System.out.println(tableName + "表已存在!!!");
            return;
        }
        HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
        for (String cf : cfs) {
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
        admin.createTable(hTableDescriptor);
    }

    //4.删除表
    private static void dropTable(String tableName) throws IOException {
        if (!isTableExist(tableName)) {
            System.out.println(tableName + "表不存在!!!");
            return;
        }
        TableName table = TableName.valueOf(tableName);
        admin.disableTable(table);
        admin.deleteTable(table);
    }

    //5.新增数据(修改)->put 'stu','1001','info:name','value'
    private static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(Bytes.toBytes(rowKey));
        put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));
        put.addColumn(Bytes.toBytes(cf), Bytes.toBytes("sex"), Bytes.toBytes("female"));
        put.addColumn(Bytes.toBytes(cf), Bytes.toBytes("addr"), Bytes.toBytes("shanghai"));
        table.put(put);
        table.close();
    }
    //6.查询数据(Get方式)
    private static void getData(String tableName, String rowKey, String cf, String cn) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        //创建Get对象
        Get get = new Get(Bytes.toBytes(rowKey));
//        get.addFamily(Bytes.toBytes(cf));
        //指定列族:列获取信息
        get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
        //指定获取多个版本数据
        get.setMaxVersions(2);
        //获取数据
        Result result = table.get(get);
        //解析result
        for (Cell cell : result.rawCells()) {

            System.out.println("RowKey:" + Bytes.toString(CellUtil.cloneRow(cell)) +
                    ",CF:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
                    ",CN:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
                    ",Value:" + Bytes.toString(CellUtil.cloneValue(cell)));
        }
        table.close();
    }

    //7.查询数据(Scan方式)
    private static void scanData(String tableName, String start, String stop) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan(Bytes.toBytes(start), Bytes.toBytes(stop));
        ResultScanner results = table.getScanner(scan);
        for (Result result : results) {

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

                System.out.println("RowKey:" + Bytes.toString(CellUtil.cloneRow(cell)) +
                        ",CF:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
                        ",CN:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
                        ",Value:" + Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        //关闭连接
        table.close();
    }

    //8.查询数据(Scan方式带过滤器)
    private static void scanDataWithFilter(String tableName, String cf, String cn, String value) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        //创建Scan对象
        Scan scan = new Scan(Bytes.toBytes("1008"), Bytes.toBytes("11"));
        //创建Filter对象
        RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("7"));
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes(cf), Bytes.toBytes(cn), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(value));
        //创建过滤器集合
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);
        filterList.addFilter(rowFilter);
        filterList.addFilter(singleColumnValueFilter);
        //添加过滤器
        scan.setFilter(filterList);
        //扫描数据
        ResultScanner results = table.getScanner(scan);
        for (Result result : results) {

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

                System.out.println("RowKey:" + Bytes.toString(CellUtil.cloneRow(cell)) +
                        ",CF:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
                        ",CN:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
                        ",Value:" + Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }

        table.close();
    }

    //9.删除数据
    private static void deleteData(String tableName, String rowKey, String cf, String cn) throws IOException {
        //获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));
        //创建Delete对象
        Delete delete = new Delete(Bytes.toBytes(rowKey));
        //指定列族删除
//        delete.addFamily(Bytes.toBytes(cf));
        //指定列族:列删除
        delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
        delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cn));
        table.delete(delete);
        table.close();
    }

}
Hbese API

发表评论

电子邮件地址不会被公开。 必填项已用*标注

滚动到顶部