HBase JAVA API

下面是一个简单的示例,展示了使用HBase的Java API来创建表、插入数据、查询数据和删除数据的过程:

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

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

import org.apache.hadoop.hbase.util.Bytes;

public class HBaseExample {

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

        // 创建HBase配置

        Configuration config = HBaseConfiguration.create();

        // 创建HBase连接

        Connection connection = ConnectionFactory.createConnection(config);

        // 创建表名

        TableName tableName = TableName.valueOf("my_table");

        // 创建列族名

        byte[] columnFamily = Bytes.toBytes("cf");

        // 创建表描述符

        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName)

                .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(columnFamily).build());

        // 创建表

        Admin admin = connection.getAdmin();

        admin.createTable(tableDescriptorBuilder.build());

        admin.close();

        // 获取表实例

        Table table = connection.getTable(tableName);

        // 插入数据

        Put put = new Put(Bytes.toBytes("row1"));

        put.addColumn(columnFamily, Bytes.toBytes("col1"), Bytes.toBytes("value1"));

        table.put(put);

        // 查询数据

        Get get = new Get(Bytes.toBytes("row1"));

        Result result = table.get(get);

        byte[] value = result.getValue(columnFamily, Bytes.toBytes("col1"));

        System.out.println("Value: " + Bytes.toString(value));

        // 删除数据

        Delete delete = new Delete(Bytes.toBytes("row1"));

        table.delete(delete);

        // 关闭连接

        table.close();

        connection.close();

    }

}

这个示例演示了如何使用HBase的Java API来创建一个名为"my_table"的表,插入一条数据(行键为"row1",列族为"cf",列限定符为"col1",值为"value1"),然后查询并打印出该数据的值,并最后删除该数据。注意,这只是一个简单的示例,实际使用中可能会涉及更复杂的操作和更多的配置选项。

为了使用HBase Java API进行实验,您需要设置以下环境:

1. Java开发环境:确保您已经安装了Java Development Kit (JDK)。建议使用最新版本的JDK。

2. HBase依赖库:您需要下载HBase的Java客户端库并将其添加到您的项目中。您可以从HBase的官方网站或Maven仓库获取HBase的Java客户端库。

3. Hadoop集群:HBase是建立在Hadoop之上的分布式数据库,因此您需要配置一个可用的Hadoop集群以供HBase使用。您可以使用Hadoop的单节点模式进行开发和测试,也可以配置一个多节点的Hadoop集群。

4. HBase配置文件:HBase有一些配置文件,您需要根据您的环境进行相应的配置。主要的配置文件包括`hbase-site.xml`、`hbase-env.sh`和`regionservers`。您需要根据您的Hadoop集群配置修改这些文件。

5. HBase表的创建:在使用HBase Java API之前,您需要在HBase中创建表并定义列族。您可以使用HBase shell或HBase管理界面(如Hue)来创建表,或者使用HBase Java API动态创建表。

6. Java代码编写:最后,您需要使用Java编写代码来连接HBase集群、执行操作。您可以使用HBase提供的Java API来进行连接、插入、查询等操作。确保您已经导入了相关的类和方法,并按照API文档进行操作。

public static boolean isTableExists(String namespace,String tableName) throws IOException {
    // 1. 获取 admin
    Admin admin = connection.getAdmin();
    // 2. 使用方法判断表格是否存在
    boolean b = false;
    try {
        b = admin.tableExists(TableName.valueOf(namespace, tableName));
    } catch (IOException e) {
        e.printStackTrace();

    }
    // 3. 关闭 admin
    admin.close();
    // 3. 返回结果
    return b;
    // 后面的代码不能生效
}



//创建表格    namespace:命名空间名称    tableName:表

名    columnFamilies:列族名
public static void createTable(String namespace , String tableName , String... columnFamilies) throws IOException {
    // 判断是否有至少一个列族
    if (columnFamilies.length == 0){
        System.out.println("创建表格至少有一个列族");
        return;
    }
    // 判断表格是否存在
    if (isTableExists(namespace,tableName)){
        System.out.println("表格已经存在");
        return;
    }
    // 1.获取 admin
    Admin admin = connection.getAdmin();
    // 2. 调用方法创建表格
    // 2.1 创建表格描述的建造者
    TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName));
    // 2.2 添加参数
    for (String columnFamily : columnFamilies) {
        // 2.3 创建列族描述的建造者
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));
        // 2.4 对应当前的列族添加参数
        // 添加版本参数
        columnFamilyDescriptorBuilder.setMaxVersions(5);
        // 2.5 创建添加完参数的列族描述

        tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
    }
    // 2.6 创建对应的表格描述
    try {
        admin.createTable(tableDescriptorBuilder.build());

    } catch (IOException e) {
        e.printStackTrace();
    }
    // 3. 关闭 admin
    admin.close();
}



//修改表格    namespace:命名空间名称    tableName:表名    columnFamily:列族名    version:版本号
public static void modifyTable(String namespace ,String tableName,String columnFamily,int version) throws IOException {
    // 判断表格是否存在
    if (!isTableExists(namespace,tableName)){
        System.out.println("表格不存在无法修改");
        return;
    }
    // 1. 获取 admin
    Admin admin = connection.getAdmin();
    try {
        // 2. 调用方法修改表格
        // 2.0 获取之前的表格描述
        TableDescriptor descriptor =
                admin.getDescriptor(TableName.valueOf(namespace, tableName));
        // 2.1 创建一个表格描述建造者
        // 如果使用填写 tableName 的方法 相当于创建了一个新的表格描述建造者 没有之前的信息
        // 如果想要修改之前的信息 必须调用方法填写一个旧的表格描述
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);
        // 2.2 对应建造者进行表格数据的修改
        ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));
        // 创建列族描述建造者
        // 需要填写旧的列族描述
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);
        // 修改对应的版本
        columnFamilyDescriptorBuilder.setMaxVersions(version);
        // 此处修改的时候 如果填写的新创建 那么别的参数会初始化

        tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
        admin.modifyTable(tableDescriptorBuilder.build());
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 3. 关闭 admin
    admin.close();
}


//删除表格    namespace:命名空间名称    tableName:表名  返回值:是否删除成功
public static boolean deleteTable(String namespace ,String tableName) throws IOException {
    // 1. 判断表格是否存在
    if (!isTableExists(namespace,tableName)){
        System.out.println("表格不存在 无法删除");
        return false;
    }
    // 2. 获取 admin
    Admin admin = connection.getAdmin();
    // 3. 调用相关的方法删除表格
    try {
        // HBase 删除表格之前 一定要先标记表格为不可以
        TableName tableName1 = TableName.valueOf(namespace, tableName);
        admin.disableTable(tableName1);
        admin.deleteTable(tableName1);
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 4. 关闭 admin
    admin.close();
    return true;
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值