HBase Java常用API

HBase Java常用API

常用API

hbase类 功能
org.apache.hadoop.hbase.HBaseConfiguration HBase配置信息。默认的构造方法会尝试从hbase-default.xml和hbase-site.xml中读取配置。
org.apache.hadoop.hbase.client.HBaseAdmin 提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。
org.apache.hadoop.hbase.HTableDescriptor 包含了表的名字极其对应表的列族。
org.apache.hadoop.hbase.HColumnDescriptor 维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。
org.apache.hadoop.hbase.client.HTable 可以用来和HBase表直接通信。此方法对于更新操作来说是非线程安全的。
org.apache.hadoop.hbase.client.Put 用来对单个行执行添加操作。
org.apache.hadoop.hbase.client.Get 用来获取单个行的相关信息。

常用操作

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

import java.io.IOException;

public class Template {

    public static Configuration configuration; // 配置信息
    public static Connection connection; // 连接信息
    public static Admin admin; // 对数据库进行管理,用于管理对表的创建删除等

    // 建立连接
    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://192.168.199.105:9000/hbase");
        configuration.set("hbase.zookeeper.quorum", "192.168.199.105");
        configuration.set("hbase.zookeeper.property.clientPort", "2181");

        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    // 关闭连接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void createTable(String myTableName, String[] colFamily) throws IOException {
        /**
         * @Description: 建表。HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据
         * @param: [myTableName, colFamily] [表名, 列族名]
         * @return: void
         */

        init();
        TableName tableName = TableName.valueOf(myTableName);

        if (admin.tableExists(tableName)) {
            System.out.println("表已存在!");
        } else {
            HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); // 对表信息进行管理的类
            for (String str : colFamily) {
                HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str); // 对列族进行管理的类
                hTableDescriptor.addFamily(hColumnDescriptor);
            }
            admin.createTable(hTableDescriptor);
            System.out.println("表" + myTableName + "创建成功");
        }
        close();
    }


    public static void deleteTable(String tableName) throws IOException {
        /**
         * @Description: 删除指定表
         * @param: [tableName] 表名
         * @return: void
         */
        init();
        TableName tn = TableName.valueOf(tableName);
        if (admin.tableExists(tn)) {
            // 先disable再delete
            admin.disableTable(tn);
            admin.deleteTable(tn);
        }
        close();
    }


    public static void listTables() throws IOException {
        /**
         * @Description: 查看已有表
         * @param: []
         * @return: void
         */
        init();
        HTableDescriptor hTableDescriptors[] = admin.listTables();
        for (HTableDescriptor hTableDescriptor : hTableDescriptors) {
            System.out.println(hTableDescriptor.getNameAsString());
        }
        close();
    }


    public static void insertRow(String tableName, String rowKey, String colFamily, String col, String val) throws IOException {
        /**
         * @Description: 向某一行的某一列插入数据
         * @param: [tableName, rowKey, colFamily, col, val] [表名, 行键, 列族名, 列名(没有为空), 值]
         * @return: void
         */
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
        table.put(put);
        table.close();
        close();
    }


    public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException {
        /**
         * @Description: 删除数据
         * @param: [tableName, rowKey, colFamily, col] [表名, 行键, 列族名, 列名]
         * @return: void
         */
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        // 删除指定列族的所有数据
        // delete.addFamily(colFamily.getBytes());
        // 删除指定列的数据
        // delete.addColumn(colFamily.getBytes(), col.getBytes());

        table.delete(delete);
        table.close();
        close();
        System.out.println("数据已删除");
    }


    public static void getData(String tableName, String rowKey, String colFamily, String col) throws IOException {
        /**
         * @Description: 根据行键rowkey查找数据
         * @param: [tableName, rowKey, colFamily, col] [tableName, rowKey, colFamily, col]
         * @return: void
         */
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowKey.getBytes());
        get.addColumn(colFamily.getBytes(), col.getBytes());
        Result result = table.get(get);
        showCell(result);
        table.close();
        close();
    }


    public static void showCell(Result result) {
        /**
         * @Description: 格式化输出
         * @param: [result]
         * @return: void
         */
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " ");
            System.out.println("Timetamp:" + cell.getTimestamp() + " ");
            System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " ");
            System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " ");
            System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " ");
        }
    }


    public static void main(String[] args) throws IOException {
        // 创建一个表,表名为Score,列族为sname,course
        createTable("Score", new String[]{"sname", "course"});

        // 在Score表中插入一条数据,其行键为95001,sname为Mary(因为sname列族下没有子列所以第四个参数为空)
        // 等价命令:put 'Score','95001','sname','Mary'
        // insertRow("Score", "95001", "sname", "", "Mary");

        // 在Score表中插入一条数据,其行键为95001,course:Math为88(course为列族,Math为course下的子列)
        // 等价命令:put 'Score','95001','score:Math','88'
        // insertRow("Score", "95001", "course", "Math", "88");

        // 在Score表中插入一条数据,其行键为95001,course:English为85(course为列族,English为course下的子列)
        // 等价命令:put 'Score','95001','score:English','85'
        // insertRow("Score", "95001", "course", "English", "85");

        // 1、删除Score表中指定列数据,其行键为95001,列族为course,列为Math
        // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码取消注释注释,将删除制定列族的代码注释
        // 等价命令:delete 'Score','95001','score:Math'
        // deleteRow("Score", "95001", "course", "Math");

        // 2、删除Score表中指定列族数据,其行键为95001,列族为course(95001的Math和English的值都会被删除)
        // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,将删除制定列族的代码取消注释
        // 等价命令:delete 'Score','95001','score'
        // deleteRow("Score", "95001", "course", "");

        // 3、删除Score表中指定行数据,其行键为95001
        // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,以及将删除制定列族的代码注释
        // 等价命令:deleteall 'Score','95001'
        // deleteRow("Score", "95001", "", "");

        // 查询Score表中,行键为95001,列族为course,列为Math的值
        // getData("Score", "95001", "course", "Math");

        // 查询Score表中,行键为95001,列族为sname的值(因为sname列族下没有子列所以第四个参数为空)
        // getData("Score", "95001", "sname", "");

        // 删除Score表
        // deleteTable("Score");
    }
}

你可能感兴趣的:(hadoop,hbase,java,api)