HBase 管理 API: HBaseAdmin

管理 API 提供了各种数据管理操作功能:通过列族创建表,检查表是否存在,修改表和列族定义,删除表等等。下面将其提供的功能按操作相关性分组讨论。

1 基本操作 (Basic Operations)

在使用管理 API 之前,需要创建一个 Admin 接口实现的实例。不能直接创建该接口实例,要通过与 table 一样的方式,通过 Connection 类的方法获取一个
Admin 实例:

Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
...
TableName[] tables = admin.listTableNames();
...
admin.close();
connection.close();

传入已有的配置实例提供了足够的配置信息给 API 来通过 ZooKeeper quorum 找到集群,就如客户端 API 所做的一样。使用管理 API 实例进行必要的操作,并且应该在使用后销毁。换句话说,不要长期持有 Admin 实例。使用完之后应调用 close() 方法释放在通信两端占用的资源。

Admin 继承了 Abortable 接口,因此有如下方法:

 void abort(String why, Throwable e)
 boolean isAborted()

这两个方法由框架隐式调用,例如,当发生致命的连接错误或关闭集群时。用户不应直接调用该方法,而要依赖于系统的调用。

Admin 接口还提供了如下两基本调用:

Connection getConnection()
void close()

getConnection() 返回当前 Connection 实例。
close() 方法释放当前 Admin 实例持有的资源。

2 名称空间操作 (Namespace Operations)

可以利用管理 API 创建名称空间,用于持有之后分配给它的表。并且可以修改或删除已存在的名称空间,以及获取名称空间描述符,方法如下:

void createNamespace(final NamespaceDescriptor descriptor)
void modifyNamespace(final NamespaceDescriptor descriptor)
void deleteNamespace(final String name)
NamespaceDescriptor getNamespaceDescriptor(final String name)
NamespaceDescriptor[] listNamespaceDescriptors()

示例:

Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();

NamespaceDescriptor namespace = NamespaceDescriptor.create("testspace").build();
admin.createNamespace(namespace);

NamespaceDescriptor namespace2 = admin.getNamespaceDescriptor("testspace");
System.out.println("Simple Namespace: " + namespace2);

NamespaceDescriptor[] list = admin.listNamespaceDescriptors();
for (NamespaceDescriptor nd : list) {
    System.out.println("List Namespace: " + nd);
}

NamespaceDescriptor namespace3 = NamespaceDescriptor.create("testspace")
                                .addConfiguration("Description", "Test Namespace")
                                .build();
                                
admin.modifyNamespace(namespace3);

NamespaceDescriptor namespace4 = admin.getNamespaceDescriptor("testspace");
System.out.println("Custom Namespace: " + namespace4);

admin.deleteNamespace("testspace");
NamespaceDescriptor[] list2 = admin.listNamespaceDescriptors();
for (NamespaceDescriptor nd : list2) {
    System.out.println("List Namespace: " + nd);
}

输出:

 Simple Namespace: {NAME => 'testspace'}
    List Namespace: {NAME => 'default'}
    List Namespace: {NAME => 'hbase'}
    List Namespace: {NAME => 'testspace'}
    Custom Namespace: {NAME => 'testspace', Description => 'Test Namespace'}
    List Namespace: {NAME => 'default'}
    List Namespace: {NAME => 'hbase'}

3.其他(后续补充)
注意
常见错误:在删除一个表之前,需要首先确保它是 disabled

你可能感兴趣的:(HBase 管理 API: HBaseAdmin)