HBase常用API操作

新建项目后在 pom.xml 中添加依赖:

<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>

代码如下

package test;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

/**
 * DDL:
 * 1.判断表是否存在
 * 2.创建name_space
 * 3.表的基本操作(增删)
 * 4.删除表
 *
 * DML:
 * 5.插入数据(插入和修改)
 * 6.查询数据(get)
 * 7.scan查询数据
 * 8.删除数据
 */

public class TestAPI {

    private static Connection connection = null;
    private static Admin admin = null;

    static {

        try {
            //1.获取配置文件信息
//        HBaseConfiguration configuration = new HBaseConfiguration();
            Configuration configuration = HBaseConfiguration.create();
            configuration.set("hbase.zookeeper.quorum", "hadoop102:2181,hadoop103:2181,hadoop104:2181");

            //2.获取管理员对象
//        HBaseAdmin admin = new HBaseAdmin(configuration);
            connection = ConnectionFactory.createConnection(configuration);

            //创建Admin对象
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //1.判断表是否存在
    public static boolean isTableExist(String tableName) throws IOException {

        //注意这里的Table创建方式
        boolean exists = admin.tableExists(TableName.valueOf(tableName));

//        //关闭连接
//        admin.close();

        return exists;
    }

    //2.创建表
    public static void createTable(String tableName,String... cfs) throws IOException {

        //1.判断是否存在列族信息
        if(cfs.length <= 0){
            System.out.println("请设置列族信息!");
            return;
        }

        //2.判断表是否存在
        if(isTableExist(tableName)){
            System.out.println(tableName+"表已存在!");
            return;
        }

        //3.创建表的描述器
        HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));

        //4.循环添加列族信息
        for (String cf : cfs) {

            //5.创建列族描述器
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
            //6.添加具体表是否存在
            descriptor.addFamily(hColumnDescriptor);

        }

        //7.创建表
        admin.createTable(descriptor);


    }

    //3.删除表
    public static void dropTable(String tableName) throws IOException {

        //1.判断表是否存在
        if(!isTableExist(tableName)){
            System.out.println(tableName+"表不存在!");
            return;
        }

        //2.使表下线
        admin.disableTable(TableName.valueOf(tableName));

        //3.删除表
        admin.deleteTable(TableName.valueOf(tableName));
    }

    //4.创建命名空间
    public static void createNameSpace(String ns){


        //1.创建命名空间描述器
        NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();

        //2.创建命名空间
        try {
            admin.createNamespace(namespaceDescriptor);
        }catch (NamespaceExistException e){
            System.out.println(ns+"命名空间已存在!");
        }
        catch (IOException e) {
            e.printStackTrace();
        }

    }

    //5.向表插入数据
    public static void putData(String tableName,String rowKey,String cf,String cn,String value) throws IOException {

        //1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));

        //2.获取Put对象
        Put put = new Put(Bytes.toBytes(rowKey));

        //3.给Put对象赋值
        put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));

        //4.插入数据
        table.put(put);

        //5.关闭表资源
        table.close();
    }

    //6.获取数据(get)
    public static void getData(String tableName, String rowKey,String cf,String cn) throws IOException {

        //1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));

        //2.创建Get对象
        Get get = new Get(Bytes.toBytes(rowKey));

        //2.1指定获取的列族和列名
        get.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn));

        get.setMaxVersions();

        //3.获取数据
        Result result = table.get(get);

        //4.解析result并打印
        for (Cell cell : result.rawCells()) {
            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());

        }

    }

    //7.获取数据(scan)
    public static void scanTable(String tableName) throws IOException {

        //1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));

        //2.构建scan对象
        Scan scan = new Scan();

        //3.扫描表
        ResultScanner scanner = table.getScanner(scan);

        //4.解析result
        for (Result result : scanner) {

            //5.解析result并打印
            for (Cell cell : result.rawCells()) {
                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());
            }

        }

        //6.关闭表连接
        table.close();

    }

    //8.删除数据
    public static void deleteData(String tableName, String rowKey,String cf,String cn) throws IOException {

        //1.获取表连接
        Table table = connection.getTable(TableName.valueOf(tableName));

        //2.构建删除对象
        Delete delete = new Delete(Bytes.toBytes(rowKey));

//        delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn));
        delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));

        //3.执行删除操作
        table.delete(delete);

        //4.关闭连接
        table.close();

    }

    //关闭资源
    public 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();
            }
        }


    }

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

        //1.测试表是否存在
        System.out.println(isTableExist("stu6"));

        //2.测试创建表操作
        createTable("stu6","info1","info2");

        //3.删除表测试
        dropTable("stu6");

        //4.创建命名空间测试
        createNameSpace("nihao");

        //5.插入数据测试
        putData("stu1", "1001", "info1", "name", "jingjing");

        System.out.println(isTableExist("stu6"));

        //6.获取数据(get)
        getData("stu1","1001","info2","sex");

        //7.获取数据(scan)
        scanTable("stu1");

        //8.测试删除
        deleteData("stu1", "1001", "info1", "name");


        //关闭资源
        close();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章