Java API管理表

第1关:JavaAPI获取表的列表

编程要求

实现列出HBase中所有表的表名、表是否存在,表是否可用的功能。

package step1;

import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.*;

public class Task {

	public void showTableList() throws Exception {
		/********* Begin *********/
		Configuration conf=HBaseConfiguration.create();
        Connection conn=ConnectionFactory.createConnection(conf);
        Admin admin=conn.getAdmin();
        List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();
        for(TableDescriptor tableDescriptor:tableDescriptors){
            System.out.println("Table:"+tableDescriptor.getTableName());
            System.out.println("\texists:" + admin.tableExists(tableDescriptor.getTableName()));
			System.out.println("\tenabled:" + admin.isTableEnabled(tableDescriptor.getTableName()));
        }
		/********* End *********/
	}
}

第2关:修改表

知识点

1.对块大小进行调整时主要取决于用户平均读取数据的大小和数据平均键值对规模。

编程要求

在右侧编辑器begin-end处编写程序修改表的结构,要求如下:

  • 修改表t_emp2
    • 修改列族databolckSize1M
    • 关闭列族data的块缓存;
    • 设置列族data的压缩格式为GZ
  • 修改表t_dept2
    • 设置列族data1的最小单元时间版本为2,最大时间版本为5
    • 开启列族data1的激进缓存策略;
    • 设置列族data1的生存时间为一天
  • 删除表t_emp2的列族data1
  • 删除表t_dept2的列族data
package step2;

import java.io.IOException;


import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.io.compress.Compression;
import org.apache.hadoop.hbase.util.*;

public class Task {

	public void updateTables()throws Exception{
		/********* Begin *********/
		Configuration conf=HBaseConfiguration.create();
        Connection conn=ConnectionFactory.createConnection(conf);
        Admin admin=conn.getAdmin();

        TableName tablename1=TableName.valueOf("t_emp2");
        ColumnFamilyDescriptorBuilder buildFamily1 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data"));//构建Builder对象
        buildFamily1.setBlocksize(1024*1024); //修改列族的bolcksize为1M
        buildFamily1.setBlockCacheEnabled(false); //关闭缓存
        buildFamily1.setCompressionType(Compression.Algorithm.GZ); //设置列族的压缩格式为GZ

        TableName tablename2=TableName.valueOf("t_dept2");
        ColumnFamilyDescriptorBuilder buildFamily2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data1"));//构建Builder对象
        buildFamily2.setMinVersions(2);//设置列族data1的最小单元时间版本为2
        buildFamily2.setMaxVersions(5);//最大时间版本为5
        buildFamily2.setInMemory(true); //开启列族data1的激进缓存策略
        buildFamily2.setTimeToLive(60*60*24);//设置列族data1的生存时间为一天

        ColumnFamilyDescriptor family1 = buildFamily1.build();//构建Family对象
        admin.modifyColumnFamily(tablename1, family1);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor
        admin.deleteColumnFamily(tablename1, Bytes.toBytes("data1"));//删除表t_dept2的列族data

        ColumnFamilyDescriptor family2 = buildFamily2.build();//构建Family对象
        admin.modifyColumnFamily(tablename2, family2);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor
        admin.deleteColumnFamily(tablename2, Bytes.toBytes("data"));//删除表t_emp2的列族data1
		/********* End *********/
	}
}

第3关:禁用表、启用表、删除表

编程要求

请在右侧编辑器begin-end中编写代码补全函数,实现函数要实现的功能,具体功能请查看右侧注释。

package step3;

import java.io.IOException;

import org.apache.hadoop.conf.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.*;

public class Task {

	/**
	 * 刪除表
	 * @param tableName 表名
	 * @throws Exception
	 */
	public void deleteTable(String tableName)throws Exception{
		/********* Begin *********/
		Configuration config = new Configuration();
        Connection conn = ConnectionFactory.createConnection(config);
        Admin admin = conn.getAdmin();
        TableName tablename = TableName.valueOf(tableName);
        admin.disableTable(tablename);
        admin.deleteTable(tablename);

		/********* End *********/
	}
	
	/**
	 * 创建表
	 * @param tableName  表名
	 * @param columnNames 列族的动态数组
	 * @throws Exception
	 */
	public void createTable(String tableName,String... columnNames)throws Exception{
		/********* Begin *********/
        Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
		Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
		Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
        TableDescriptorBuilder test_teacher_info = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
        for(String s: columnNames){
			ColumnFamilyDescriptor of = ColumnFamilyDescriptorBuilder.of(s);
 			test_teacher_info.setColumnFamily(of);
		}
        //构建
        TableDescriptor build = test_teacher_info.build();
 
        admin.createTable(build);

		/********* End *********/
	}
	
	/**
	 * 启用表
	 * @param tableName 
	 * @throws Exception 
	 */
	public void enableTable(String tableName) throws Exception{
		/********* Begin *********/
		Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
		Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
		Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
		TableName demoName = TableName.valueOf(Bytes.toBytes(tableName));
		admin.enableTable(demoName);

		/********* End *********/
	}
	
	/**
	 * 禁用表
	 * @param tableName
	 */
	public void disableTable(String tableName)throws Exception{
		/********* Begin *********/
		Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
		Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
		Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
		TableName testName = TableName.valueOf(Bytes.toBytes(tableName));
		admin.disableTable(testName);

		/********* End *********/
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值