HBase Admin Shell语法以及Java API 的使用

HBase Admin Shell语法以及Java API 的使用

     HBase是用Java编写的,因此它提供Java API和HBase通信。 Java API是与HBase通信的最快方法。下面给出的是引用Java API管理,涵盖用于管理表的任务。
HBaseAdmin类
    HBaseAdmin是一个类表示管理。这个类属于org.apache.hadoop.hbase.client包。使用这个类,可以执行管理员任务。使用Connection.getAdmin()方法来获取管理员的实例。可对表级别进行处理
方法及说明
S.No. 方法及说明
1
void createTable(HTableDescriptor desc)
创建一个新的表
2
void createTable(HTableDescriptor desc, byte[][] splitKeys)
创建一个新表使用一组初始指定的分割键限定空区域
3
void deleteColumn(byte[] tableName, String columnName)
从表中删除列
4
void deleteColumn(String tableName, String columnName)
删除表中的列
5
void deleteTable(String tableName)
删除表

Descriptor类
这个类包含一个HBase表,如详细信息:
  • 所有列族的描述,
  • 如果表是目录表,
  • 如果表是只读的,
  • 存储的最大尺寸,
  • 当区域分割发生,
  • 与之相关联的协同处理器等

构造函数

S.No. 构造函数和总结
1
HTableDescriptor(TableName name)
构造一个表描述符指定TableName对象。

方法及说明

S.No. 方法及描述
1
HTableDescriptor addFamily(HColumnDescriptor family)
将列家族给定的描述符

一、创建表
【1】Shell 使用
可以使用命令创建一个表,在这里必须指定表名和列族名。在HBase shell中创建表的语法如下所示。

create ‘’,’
示例:下面给出的是一个表名为emp的样本模式。它有两个列族:“personal data”和“professional data”。
Row key personal data professional data
     
     
在HBase shell创建该表如下所示。         
         
在HBase shell创建该表如下所示。

hbase(main):002:0> create 'emp', 'personaldata', 'professionaldata'
它会给下面的输出。
0 row(s) in 1.1300 seconds
=> Hbase::Table - emp
验证创建 :  可以验证是否已经创建,使用 list 命令如下所示。在这里,可以看到创建的emp表。
hbase(main):002:0> list
TABLE
emp
2 row(s) in 0.0340 seconds

【2】JavaAPI 使用

下面给出的是完整的程序,通过管理员创建一个表。
import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.conf.Configuration;

public class CreateTable {
      
   public static void main(String[] args) throws IOException {
    //配置对象作为参数
   Configuration con = HBaseConfiguration.create();
     con.set("hbase.zookeeper.quorum", "140.143.236.169:2181");
     con.set("hbase.rootdir", "hdfs://140.143.236.169:8020/hbase");
   //初始实例配置类传递此实例给HBaseAdmin
   HBaseAdmin admin = new HBaseAdmin(con);

   // Instantiating table descriptor class
   HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("emp"));

   // Adding column families to table descriptor
   tableDescriptor.addFamily(new HColumnDescriptor("personal"));
   tableDescriptor.addFamily(new HColumnDescriptor("professional"));

   // Execute the table through admin
   admin.createTable(tableDescriptor);
   System.out.println(" Table created ");
   }
  }
编译和执行上述程序如下所示。
Table created

二、HBase 库列表
【1】Shell 使用
list 是用来列出HBase中所有表的命令。下面给出了 list 命令的语法。

hbase(main):001:0 > list
当输入这个命令,并在HBase提示符下执行,它会显示HBase中的所有表的列表,如下图所示。

hbase(main):001:0> list
TABLE
emp
在这里,可以看到一个名为表emp。

【2】JavaAPI 使用

    就可以得到使用HTableDescriptor类长度可变的HTableDescriptor[]数组的长度。从该对象使用getNameAsString()方法获得表的名称。运行'for'循环而获得HBase表的列表。
下面给出的是使用Java API程序列出所有HBase中表的列表。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;


public class ListTables {

   public static void main(String args[])throws MasterNotRunningException, IOException{

      // 配置对象作为参数
   Configuration  con = HBaseConfiguration.create();
     con.set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
      con.set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
      // 初始实例配置类传递此实例给HBaseAdmin
   HBaseAdmin admin = new HBaseAdmin( con);
    //列出HBase中所有的表的列表
    HTableDescriptor[] tableDescriptor =admin.listTables();

   // printing all the table names.
   for (int i=0; i
      System.out.println(tableDescriptor[i].getNameAsString());
   }
   
   }
}
编译和执行上述程序如下所示。

User
emp

三、禁用表
【1】Shell 使用

要删除表或改变其设置,首先需要使用 disable 命令关闭表。使用 enable 命令,可以重新启用它。

下面给出的语法是用来禁用一个表:

disable 'emp'
下面给出的是一个例子,说明如何禁用表。

hbase(main):025:0> disable 'emp'
0 row(s) in 1.2760 seconds
验证  :    禁用表之后,仍然可以通过 list 和exists命令查看到。无法扫描到它存在,它会给下面的错误。

hbase(main):028:0> scan 'emp'
ROW         COLUMN+CELL
ERROR: emp is disabled.
is_disabled

这个命令是用来查看表是否被禁用。它的语法如下。

hbase> is_disabled 'table name'
下面的例子验证表名为emp是否被禁用。如果禁用,它会返回true,如果没有,它会返回false。

hbase(main):031:0> is_disabled 'emp'
true
0 row(s) in 0.0440 seconds
disable_all

此命令用于禁用所有匹配给定正则表达式的表。disable_all命令的语法如下。

hbase> disable_all 'r.*'
假设有5个表在HBase,即raja, rajani, rajendra, rajesh 和 raju。下面的代码将禁用所有以 raj 开始的表。

hbase(main):002:0> disable_all 'raj.*'

raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?

y

5 tables successfully disabled

【2】JavaAPI 使用

要验证一个表是否被禁用,使用isTableDisabled()方法和disableTable()方法禁用一个表。这些方法属于HBaseAdmin类。按照下面给出禁用表中的步骤。
下面给出的是完整的程序,以验证表是否被禁用;如果没有,那么禁用它

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class DisableTable{

   public static void main(String args[]) throws MasterNotRunningException, IOException{

   // Instantiating configuration class
   Configuration conf = HBaseConfiguration.create();
    conf .set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
    conf .set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
   // Instantiating HBaseAdmin class
   HBaseAdmin admin = new HBaseAdmin(conf);

   // Verifying weather the table is disabled
    Boolean bool = admin.isTableDisabled("emp");
   System.out.println(bool);

   // Disabling the table using HBaseAdmin object
   if(!bool){
       admin.disableTable("emp");
      System.out.println("Table disabled");
   }

   }
}
编译和执行上述程序如下所示。
false
Table disabled

四、启用表
【1】Shell 使用
启用表的语法:
enable ‘emp’
给出下面是一个例子,使一个表启用。

hbase(main):005:0> enable 'emp'
0 row(s) in 0.4580 seconds
验证:     启用表之后,扫描。如果能看到的模式,那么证明表已成功启用。
hbase(main):006:0> scan 'emp'
      ROW                        COLUMN+CELL
1 column=personal data:city, timestamp=1417516501, value=hyderabad
1 column=personal data:name, timestamp=1417525058, value=ramu
1 column=professional data:designation, timestamp=1417532601, value=manager
1 column=professional data:salary, timestamp=1417524244109, value=50000
2 column=personal data:city, timestamp=1417524574905, value=chennai
2 column=personal data:name, timestamp=1417524556125, value=ravi
2 column=professional data:designation, timestamp=14175292204, value=sr:engg
2 column=professional data:salary, timestamp=1417524604221, value=30000
3 column=personal data:city, timestamp=1417524681780, value=delhi
3 column=personal data:name, timestamp=1417524672067, value=rajesh
3 column=professional data:designation, timestamp=14175246987, value=jr:engg
3 column=professional data:salary, timestamp=1417524702514, value=25000
3 row(s) in 0.0400 seconds
is_enabled

此命令用于查找表是否被启用。它的语法如下:

hbase> is_enabled 'table name'
下面的代码验证表emp是否启用。如果启用,它将返回true,如果没有,它会返回false。

hbase(main):031:0> is_enabled 'emp'
true

0 row(s) in 0.0440 seconds

【2】JavaAPI 使用

要验证一个表是否被启用,使用isTableEnabled()方法;并且使用enableTable()方法使一个表启用。这些方法属于HBaseAdmin类。按照下面给出启用表的步骤。

下面给出的是完整的程序,以验证表是否已启用,如果它不是,那么启用它。

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class EnableTable{
   public static void main(String args[]) throws MasterNotRunningException, IOException{

   // Instantiating configuration class
   Configuration conf = HBaseConfiguration.create();
      conf .set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
    conf .set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
   // Instantiating HBaseAdmin class
   HBaseAdmin admin = new HBaseAdmin(conf);

   // Verifying weather the table is disabled
    Boolean bool = admin.isTableEnabled("emp");
   System.out.println(bool);

   // Disabling the table using HBaseAdmin object
   if(!bool){
       admin.enableTable("emp");
      System.out.println("Table Enabled");
   }   
   }
}
编译和执行上述程序如下所示。
false
Table Enabled


五、表存在
【1】Shell 使用
可以使用exists命令验证表的存在。下面的示例演示了如何使用这个命令。

hbase(main):024:0> exists 'emp'
Table emp does exist

0 row(s) in 0.0750 seconds

hbase(main):015:0> exists 'student'
Table student does not exist

0 row(s) in 0.0480 seconds

【2】JavaAPI 使用

可以使用HBaseAdmin类的tableExists()方法验证表在HBase中是否存在。按照下面给出的步骤验证HBase表存在。

下面给出的是使用java程序中的Java API来测试一个HBase表的存在。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class TableExists{

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

   // Instantiating configuration class
   Configuration conf = HBaseConfiguration.create();
       conf .set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
    conf .set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
   // Instantiating HBaseAdmin class
   HBaseAdmin admin = new HBaseAdmin(conf);

   // Verifying the existance of the table
   boolean bool = admin.tableExists("emp");
   System.out.println( bool);
   }
}
编译和执行上述程序如下所示。
true

六、删除表
【1】Shell 使用
用drop命令可以删除表。在删除一个表之前必须先将其禁用。
hbase(main):018:0> disable 'emp'
0 row(s) in 1.4580 seconds

hbase(main):019:0> drop 'emp'
0 row(s) in 0.3060 seconds
使用exists 命令验证表是否被删除。

hbase(main):020:0> exists 'emp'
Table emp does not exist

0 row(s) in 0.0730 seconds
drop_all

这个命令是用来在给出删除匹配“regex”表。它的语法如下:

hbase> drop_all ‘t.*’
注意:要删除表,则必须先将其禁用。

示例:     假设有一些表的名称为raja, rajani, rajendra, rajesh, 和 raju。

hbase(main):017:0> list
TABLE
raja
rajani
rajendra
rajesh
raju
9 row(s) in 0.0270 seconds
所有这些表以字母raj开始。首先使用disable_all命令禁用所有这些表如下所示。

hbase(main):002:0> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled
现在,可以使用 drop_all 命令删除它们,如下所示。

hbase(main):018:0> drop_all 'raj.*'
raja
rajani
rajendra
rajesh
raju

Drop the above 5 tables (y/n)?

y
5 tables successfully dropped
【2】JavaAPI 使用

可以使用 HBaseAdmin 类的deleteTable()方法删除表。按照下面给出是使用Java API来删除表中的步骤。
下面给出的是完整的Java程序用于删除HBase表。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class DeleteTable {

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

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();
           conf .set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
        conf .set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // disabling table named emp
       admin.disableTable("emp12");
      admin.deleteTable("emp12");
      System.out.println("Table deleted");
   }
}
编译和执行上述程序如下所示。

Table deleted

七、关闭表
【1】Shell 使用

可以通过键入exit命令退出shell。

hbase(main):021:0> exit
要停止HBase,浏览进入到HBase主文件夹,然后键入以下命令。
./bin/stop-hbase.sh

【2】JavaAPI 使用

可以使用HBaseAdmin类的shutdown()方法关闭HBase。按照下面给出关闭HBase的步骤:
下面给出的是停止HBase的程序。

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class ShutDownHbase{

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

      // Instantiating configuration class
      Configuration conf = HBaseConfiguration.create();
              conf .set( "hbase.zookeeper.quorum" , "140.143.236.169:2181" );
           conf .set( "hbase.rootdir" , "hdfs://140.143.236.169:8020/hbase" );
      // Instantiating HBaseAdmin class
      HBaseAdmin admin = new HBaseAdmin(conf);

      // Shutting down HBase
      System.out.println("Shutting down hbase");
       admin.shutdown();
   }
}
编译和执行上述程序如下所示。

Shutting down hbase

参考: 易百

你可能感兴趣的:(HBase)