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 ");
}
}
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());
}
}
}
编译和执行上述程序如下所示。
三、禁用表
【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");
}
}
}
编译和执行上述程序如下所示。
四、启用表
【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");
}
}
}
编译和执行上述程序如下所示。
五、表存在
【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