HBase用Java API创建表
背景
HBase 2.2.2 Jave API 中使用HTableDescriptor与HColumnDescriptor时提示不推荐使用了,并且在3.0.0版本将删除,而是使用TableDescriptorBuilder和ColumnFamilyDescriptorBuilder
实现HBase用Java API创建表、列族
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
public class HBaseOperation {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
public static void main(String[] args) throws IOException{
//createTable("t2",new String[]{"cf1","cf2"});
//addColumnFamily("t2","cf3");
//insertRow("t2","rw1","cf1","q1","val1");
//deleteTable("t2");
//listTables();
//removeColumnFamily("t2","cf3");
describeTable("t2");
}
// 建立链接
public static void init() {
configuration=HBaseConfiguration.create();
configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
try {
connection=ConnectionFactory.createConnection(configuration);
admin=connection.getAdmin();
}catch(IOException e) {
e.printStackTrace();
}
}
// 关闭连接
public static void close() {
try {
if(admin !=null) {
admin.close();
}
if(connection !=null) {
connection.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}
// 建立表
public static void createTable(String myTableName,String[] colFamily) throws IOException{
init();
TableName tableName=TableName.valueOf(myTableName);
if (admin.tableExists(tableName)) {
System.out.println("table is exist");
}else {
List<ColumnFamilyDescriptor> colFamilyList=new ArrayList<>();
TableDescriptorBuilder tableDesBuilder=TableDescriptorBuilder.newBuilder(tableName);
for(String str:colFamily) {
ColumnFamilyDescriptor colFamilyDes=ColumnFamilyDescriptorBuilder.newBuilder(str.getBytes()).build();
colFamilyList.add(colFamilyDes);
}
TableDescriptor tableDes=tableDesBuilder.setColumnFamilies(colFamilyList).build();
admin.createTable(tableDes);
}
close();
}
// 删除表
public static void deleteTable(String myTableName) throws IOException {
init();
TableName tableName=TableName.valueOf(myTableName);
if(admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("delete "+myTableName+" successful!");
}
close();
}
// 检查表是否存在
public static void CheckTableExist(String myTableName) throws IOException {
init();
TableName tableName=TableName.valueOf("t2");
if(admin.tableExists(tableName)){
System.out.println("exist");
}else {
System.out.println("not exist");
}
close();
}
// 列出数据库中所有的表
public static void listTables() throws IOException{
init();
for(TableName table:admin.listTableNames()) {
System.out.println(table);
}
close();
}
// 向表中添加一个列族
public static void addColumnFamily(String myTableName, String colFamily) throws IOException{
init();
TableName tableName=TableName.valueOf(myTableName);
if(admin.tableExists(tableName)) {
TableDescriptor tableDes=TableDescriptorBuilder.newBuilder(tableName).build();
ColumnFamilyDescriptor colFamilyDes=ColumnFamilyDescriptorBuilder.newBuilder(colFamily.getBytes()).build();
admin.addColumnFamily(tableName, colFamilyDes);
System.out.println("add "+colFamily+" successful!");
}
close();
}
// 从表中移除一个列族
public static void removeColumnFamily(String myTableName,String colFamily) throws IOException {
init();
TableName tableName=TableName.valueOf(myTableName);
if(admin.tableExists(tableName)) {
TableDescriptor tableDes=TableDescriptorBuilder.newBuilder(tableName).build();
admin.deleteColumnFamily(tableName, colFamily.getBytes());
System.out.println("remove "+colFamily+" successful!");
}
close();
}
// 描述表的详细信息
public static void describeTable(String myTableName) throws IOException{
init();
TableName tableName=TableName.valueOf(myTableName);
if(admin.tableExists(tableName)) {
ColumnFamilyDescriptor[] colFamilies=admin.getDescriptor(tableName).getColumnFamilies();
System.out.println("==============describe "+myTableName+" ================");
for(ColumnFamilyDescriptor colFamily:colFamilies) {
System.out.println(colFamily.getNameAsString());
System.out.println(colFamily.getBlocksize());
System.out.println(colFamily.getConfigurationValue(myTableName));
System.out.println(colFamily.getMaxVersions());
System.out.println(colFamily.getEncryptionType());
System.out.println(colFamily.getTimeToLive());
System.out.println(colFamily.getDFSReplication());
System.out.println();
}
}
close();
}
}