使用Java对HBase进行操作(一)

这里不再使用HBase命令行对表进行操作,而是通过Java API接口对HBase进行处理,包括对表的增删改查操作


一、判断表是否存在

  •  设置配置信息

(1)构建一个Configuration实例,该实例包含了一些客户端配置项,最重要的必须的两个配置项是HBase集群中的ZooKeeper地址与接口。配置cfg,使客户端连接到ZooKeeper,从而和HBase取得连接

(2)ConnectionFactory根据Configuration实例创建了一个Connection对象该Connection对象线程安全,封装了连接到一个HBase集群所需要的所有信息,如元数据缓存,客户端与HMaster和HRegionServer的连接等。

(3)从Connection获取一个Admin实例,获得管理权,实现创建表、删除表等操作。

Configuration cfg = HBaseConfiguration.create();
//在设置配置时,最好将ZooKeeper的三个节点都配置,否则性能会受影响(也可以写成其IP地址形式)
cfg.set("hbase.zookeeper.quorum", "centos01,centos02,centos03");
cfg.set("hbase.zookeeper.property.clientPort", "2181");
  • 根据配置信息取得与数据库的连接
Connection conn = ConnectionFactory.createConnection(cfg);
  • 通过getAdmin()方法获得管理权
HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
  •  创建一个表的描述对象,传入表的名称。通过TableName类的.valueOf()方法处理传入的表名字符串,返回一个表名
HTableDescriptor des = new HTableDescriptor(TableName.valueOf(tableName));
  • 最后通过.admin(tableName)方法判断传入的表是否存在,存在返回true ,不存在则返回false

完整代码:

public static void tableExist(String tableName) throws IOException{
		Configuration cfg = HBaseConfiguration.create();
		cfg.set("hbase.zookeeper.quorum", "centos01");
		cfg.set("hbase.zookeeper.property.clientPort", "2181");
		Connection conn = ConnectionFactory.createConnection(cfg);
		HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
		HTableDescriptor des = new HTableDescriptor(TableName.valueOf(tableName));
		System.out.println(admin);
		System.out.println(admin.tableExists(tableName));
	}

 我们先通过HBase命令行进行对表的查询,查询一下哪些表存在:

  • 使用list命令进行查询

显然已经存在的表有“t1”和“t3”,下面使用Java程序对表进行查询操作:

 主函数:

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

tableExist("t1");
//tableExist("t2");

}

这里对t1和t2分别进行查询,已知t2不存在,则查询结果如下:

对t1查询结果

对t2查询结果

 二、创建表

在创建表中,前面配置以及与数据库取得连接的操作相同,在创建表creatTable()方法中需要传入要创建的表的名字TableName以及创建的表中包含的列族cf。

由于这里开始不确定要创建多少个列族,因此在方法的参数设置中采用“String...”表示不定参数,即可以传入多个String对象,因此下面采用增强for循环的形式从中遍历添加的列族,并通过addFamily()方法将cf添加进来

for(String cf:cfs){
			des.addFamily(new HColumnDescriptor(cf));
		}

完整代码: 

public  static void createTable(String tableName,String...cfs)throws IOException{
		Configuration cfg = new Configuration();
		cfg.set("hbase.zookeeper.quorum", "centos01");
		cfg.set("hbase.zookeeper.property.clientPort","2181");
		Connection conn = ConnectionFactory.createConnection(cfg);
		HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
		HTableDescriptor des = new HTableDescriptor(TableName.valueOf(tableName));
		for(String cf:cfs){
			des.addFamily(new HColumnDescriptor(cf));
		}
		System.out.println("ready to create");
		admin.createTable(des);
		System.out.println("create success");
		conn.close();
	}

下面对t4进行创建:

主函数:

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

createTable("t4","cf1","cf2");

}

实验结果:

输出“create success”,使用命令行进行查询:

 

存在t4,实验成功。 

三、删除表

注意区分这里是进行整个表的删除操作,而不是表中某条数据的删除,应与后面的表中数据的删除进行区分。

在删除表的操作中应先判断该表是否存在,若存在应先通过调用disableTable()方法对表进行销毁,再通过deleteTable()方法将表进行删除。最后将conn关闭。

public static void deleteTable(String tableName)throws IOException{
		Configuration cfg =HBaseConfiguration.create();
		cfg.set("hbase.zookeeper.quorum", "centos01");
		cfg.set("hbase.zookeeper.property.clientPort","2181");
		Connection conn = ConnectionFactory.createConnection(cfg);
		HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
		if(admin.tableExists(tableName)){
			admin.disableTable(tableName);
			admin.deleteTable(tableName);
			System.out.println("成功删除"+tableName+"表");
		}else{
			System.out.println("该表不存在");
		}
		conn.close();
	}

实验结果:

实验中 选择将t3表删除,先通过Java程序对其进行删除

再通过命令行对存在的表进行查询: 

显然只剩表t1和t4,实验成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值