# 创建 connection 对象

private static Connection connection = null;
private static Admin admin = null;
static {
    try {
        // 获取配置文件信息
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "hadoop02,hadoop03,hadoop04");
        // 创建连接对象
        connection = ConnectionFactory.createConnection(configuration);
        // 创建 Admin 对象
        admin = connection.getAdmin();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

# 插入数据

// 向表插入数据
public static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException {
    // 获取表对象
    Table table = connection.getTable(TableName.valueOf(tableName));
    // 创建 put 对象
    Put put = new Put(Bytes.toBytes(rowKey));
    // 给 put 对象赋值
    put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));
    // 插入数据
    table.put(put);
    // 关闭连接
    table.close();
}

# 获取数据(get)

// 获取数据(get)
private 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.addFamily(Bytes.toBytes(cf));
    // 2.2 可选:指定列族和列
    get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
    // 2.3 设置获取数据的版本数
    get.setMaxVersions();
    // 3. 获取数据
    Result result = table.get(get);
    // 4. 解析 result 并打印
    for (Cell cell : result.rawCells()) {
        // 打印数据
        System.out.println("CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) +
                ", CN: " + Bytes.toString(CellUtil.cloneQualifier(cell)) +
                ", Value: " + Bytes.toString(CellUtil.cloneValue(cell)));
    }
    // 5. 关闭表连接
    table.close();
}

# 获取数据(scan)

// 获取数据(Scan)
private static void scanTable(String tableName) throws IOException {
    // 1. 获取表对象
    Table table = connection.getTable(TableName.valueOf(tableName));
    // 2. 构建一个 scan 对象
    Scan scan = new Scan(Bytes.toBytes("1001"), Bytes.toBytes("1002"));
    // 3. 扫描表
    ResultScanner scanner = table.getScanner(scan);
    // 4. 解析 scanner
    for (Result result : scanner) {
        // 5. 解析 result 并打印
        for (Cell cell : result.rawCells()) {
            // 打印数据
            System.out.println("RK: " + Bytes.toString(CellUtil.cloneRow(cell)) +
                    ", CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) +
                    ", CN: " + Bytes.toString(CellUtil.cloneQualifier(cell)) +
                    ", Value: " + Bytes.toString(CellUtil.cloneValue(cell)));
        }
    }
    // 6. 关闭表连接
    table.close();
}

# 删除数据

// 删除数据
private static void deleteData(String tableName, String rowKey, String cf, String cn) throws IOException {
    // 1. 获取表数据
    Table table = connection.getTable(TableName.valueOf(tableName));
    // 2. 构建 delete 对象,删除标记是 deleteFamily
    Delete delete = new Delete(Bytes.toBytes(rowKey));
    // 2.1 (加 s)可选:设置删除的列(删除所有版本)
    // 若加时间戳,则删除小于等于该时间戳的所有数据,删除标记是 deleteColumn
//        delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn));
    // 2.1 (不加 s)可选:生产环境慎用:设置删除的列(删除最新的版本)。可能会造成已经被覆盖的版本复现
    // 若加时间戳,则只删除该时间戳的数据,删除标记是 delete
//        delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
    // 2.2 删除指定的列族
    delete.addFamily(Bytes.toBytes(cf));
    // 3. 执行删除操作
    table.delete(delete);
    // 4. 关闭连接
    table.close();
}

# 测试

public static void main(String[] args) throws IOException {
    // 插入数据测试
//        putData("student", "1001", "info", "name", "zhangsan");
//        putData("student", "1001", "info", "sex", "male");
//        putData("student", "1002", "info", "name", "lisi");
//        putData("student", "1002", "info", "sex", "female");
    // 获取单行数据
//        getData("student", "1001", "info", "name");
    // 测试扫描数据
//        scanTable("student");
    // 测试删除
    deleteData("student", "1001", "info", "name");
    // 关闭资源
    close();
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝