HBase的java API 操作(DDL)

本文详细介绍了如何使用Java API在Apache HBase 2.1.2版本上执行DDL操作,包括创建、列举和删除命名空间(NS)及表。首先,通过构建配置对象和连接对象,然后创建管理员(admin)实例来实现这些操作。示例代码展示了创建表、删除表、列举表、创建NS、删除NS和列举NS的具体步骤。注意在删除表之前需要先禁用表。
摘要由CSDN通过智能技术生成

本文是基于Apache版本2.1.2的HBase开发。
本篇文章是HBase的DDL开发,对HBase的namespacetable列举,创建,删除


基本规律:

  1. 构建实例 ==> 2. 构建配置对象 ==> 3.指定服务端地址 ==> 4.构建连接对象 ==> 5.构建管理员(admin对象)
    注意:对表的操作,都需要获取 admin, 然后才可以进行相关操作, 其中删除表前需要先禁用表.

新建maven工程,导入依赖
要想使用java操作HBase,需要引入下面依赖

		<dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>2.1.2</version>
        </dependency>

代码实现

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

import java.io.IOException;
import java.util.List;

/**
 * 		TODO 通过Java API来实现DDL操作
 * 		Namespace:列举、创建、删除
 * 		Table:列举、创建、删除
 */
public class HbaseClientDDLTest {
    public static void main(String[] args) throws IOException {
        //构建实例
        HbaseClientDDLTest ddlTest = new HbaseClientDDLTest();
        //todo:1-构建连接对象
        //构建配置对象,用于管理当前程序的所有配置:用于加载hbase-default和hbase-site文件
        Configuration conf = HBaseConfiguration.create();
        //在配置中指定服务端地址:Hbase服务端地址:Zookeeper地址,在hbase-site.xml中有配置
        conf.set("hbase.zookeeper.quorum", "node1:2181,node2:2181,node3:2181");
        //构建连接对象
        Connection conn = ConnectionFactory.createConnection(conf);
        //todo:2-DDL,必须构建管理员
        HBaseAdmin admin = (HBaseAdmin) conn.getAdmin();
        //todo:3-NS操作:列举、创建、删除
//        ddlTest.listNs(admin);
//        ddlTest.createNs(admin);
//        ddlTest.dropNs(admin);
        //todo:4-Table操作:列举、创建、删除
//        ddlTest.listTable(admin);
//        ddlTest.ceateTable(admin);
//        ddlTest.dropTable(admin);
        //todo:5-释放资源
        admin.close();
        conn.close();
    }

    /**
     * 删除表
     * @param admin
     */
    private void dropTable(HBaseAdmin admin) throws IOException {
        TableName tableName = TableName.valueOf("t1");
        admin.disableTable(tableName);
        admin.deleteTable(tableName);
    }

    /**
     * 创建表
     * @param admin
     * @throws IOException
     */
    private void ceateTable(HBaseAdmin admin) throws IOException {
        //定义一个表对象:两个列族,basic【3个版本】和other
        TableName tbname = TableName.valueOf("itcast:t1");
        //先判断表是否存在,如果已经存在,先删除再创建
        if (admin.tableExists(tbname)) {
            //先禁用
            admin.disableTable(tbname);
            //然后删除
            admin.deleteTable(tbname);
        }
        //构建列族的描述器对象
        ColumnFamilyDescriptor basic = ColumnFamilyDescriptorBuilder
                .newBuilder(Bytes.toBytes("basic"))//指定列族名称
                .setMaxVersions(3)//设置最大存储版本数
                .build();

        ColumnFamilyDescriptor other = ColumnFamilyDescriptorBuilder
                .newBuilder(Bytes.toBytes("other"))
                .build();

        //构建一个表的描述器对象
        TableDescriptor desc = TableDescriptorBuilder
                .newBuilder(tbname) //指定表的名称
                .setColumnFamily(basic)//指定列族
                .setColumnFamily(other)//指定列族
                .build();
        //创建表
        admin.createTable(desc);
    }

    /**
     * 列举所有的表
     *
     * @param admin
     * @throws IOException
     */
    private void listTable(HBaseAdmin admin) throws IOException {
        //调用列举表的方法
        List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();
        //迭代取出每张表的信息
        for (TableDescriptor tableDescriptor : tableDescriptors) {
            //打印表名
            System.out.println(tableDescriptor.getTableName().getNameAsString());
        }
    }

    /**
     * 删除NS
     *
     * @param admin
     */
    private void dropNs(HBaseAdmin admin) throws IOException {
        admin.deleteNamespace("bigdata");
    }

    /**
     * 创建NS
     *
     * @param admin
     */
    private void createNs(HBaseAdmin admin) throws IOException {
        //创建一个NS的描述器
        NamespaceDescriptor descriptor = NamespaceDescriptor
                .create("bigdata")//指定NS的名称
                .build();
        //调用创建的方法
        admin.createNamespace(descriptor);
    }

    /**
     * 用于实现列举当前所有的NS
     *
     * @param admin
     */
    private void listNs(HBaseAdmin admin) throws IOException {
        //调用列举NS的方法
        NamespaceDescriptor[] descriptors = admin.listNamespaceDescriptors();
        //迭代取出每个NS的信息,打印名称即可
        for (NamespaceDescriptor descriptor : descriptors) {
            System.out.println(descriptor.getName());
        }
    }
}

HBase的DML和DQL操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值