HBase Java API之TableDescriptorBuilder,ColumnDescriptorBuilder创建表、列族

背景

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();
	}
}

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值