当前位置:   article > 正文

Java API管理表_第1关:javaapi获取表的列表

第1关:javaapi获取表的列表

第1关:JavaAPI获取表的列表

编程要求

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

  1. package step1;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.hadoop.conf.*;
  5. import org.apache.hadoop.hbase.*;
  6. import org.apache.hadoop.hbase.client.*;
  7. import org.apache.hadoop.hbase.util.*;
  8. public class Task {
  9. public void showTableList() throws Exception {
  10. /********* Begin *********/
  11. Configuration conf=HBaseConfiguration.create();
  12. Connection conn=ConnectionFactory.createConnection(conf);
  13. Admin admin=conn.getAdmin();
  14. List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();
  15. for(TableDescriptor tableDescriptor:tableDescriptors){
  16. System.out.println("Table:"+tableDescriptor.getTableName());
  17. System.out.println("\texists:" + admin.tableExists(tableDescriptor.getTableName()));
  18. System.out.println("\tenabled:" + admin.isTableEnabled(tableDescriptor.getTableName()));
  19. }
  20. /********* End *********/
  21. }
  22. }

第2关:修改表

知识点

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

编程要求

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

  • 修改表t_emp2
    • 修改列族databolckSize1M
    • 关闭列族data的块缓存;
    • 设置列族data的压缩格式为GZ
  • 修改表t_dept2
    • 设置列族data1的最小单元时间版本为2,最大时间版本为5
    • 开启列族data1的激进缓存策略;
    • 设置列族data1的生存时间为一天
  • 删除表t_emp2的列族data1
  • 删除表t_dept2的列族data
  1. package step2;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.*;
  4. import org.apache.hadoop.hbase.*;
  5. import org.apache.hadoop.hbase.client.*;
  6. import org.apache.hadoop.hbase.io.compress.Compression;
  7. import org.apache.hadoop.hbase.util.*;
  8. public class Task {
  9. public void updateTables()throws Exception{
  10. /********* Begin *********/
  11. Configuration conf=HBaseConfiguration.create();
  12. Connection conn=ConnectionFactory.createConnection(conf);
  13. Admin admin=conn.getAdmin();
  14. TableName tablename1=TableName.valueOf("t_emp2");
  15. ColumnFamilyDescriptorBuilder buildFamily1 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data"));//构建Builder对象
  16. buildFamily1.setBlocksize(1024*1024); //修改列族的bolcksize为1M
  17. buildFamily1.setBlockCacheEnabled(false); //关闭缓存
  18. buildFamily1.setCompressionType(Compression.Algorithm.GZ); //设置列族的压缩格式为GZ
  19. TableName tablename2=TableName.valueOf("t_dept2");
  20. ColumnFamilyDescriptorBuilder buildFamily2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data1"));//构建Builder对象
  21. buildFamily2.setMinVersions(2);//设置列族data1的最小单元时间版本为2
  22. buildFamily2.setMaxVersions(5);//最大时间版本为5
  23. buildFamily2.setInMemory(true); //开启列族data1的激进缓存策略
  24. buildFamily2.setTimeToLive(60*60*24);//设置列族data1的生存时间为一天
  25. ColumnFamilyDescriptor family1 = buildFamily1.build();//构建Family对象
  26. admin.modifyColumnFamily(tablename1, family1);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor
  27. admin.deleteColumnFamily(tablename1, Bytes.toBytes("data1"));//删除表t_dept2的列族data
  28. ColumnFamilyDescriptor family2 = buildFamily2.build();//构建Family对象
  29. admin.modifyColumnFamily(tablename2, family2);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor
  30. admin.deleteColumnFamily(tablename2, Bytes.toBytes("data"));//删除表t_emp2的列族data1
  31. /********* End *********/
  32. }
  33. }

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

编程要求

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

  1. package step3;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.*;
  4. import org.apache.hadoop.hbase.*;
  5. import org.apache.hadoop.hbase.client.*;
  6. import org.apache.hadoop.hbase.util.*;
  7. public class Task {
  8. /**
  9. * 刪除表
  10. * @param tableName 表名
  11. * @throws Exception
  12. */
  13. public void deleteTable(String tableName)throws Exception{
  14. /********* Begin *********/
  15. Configuration config = new Configuration();
  16. Connection conn = ConnectionFactory.createConnection(config);
  17. Admin admin = conn.getAdmin();
  18. TableName tablename = TableName.valueOf(tableName);
  19. admin.disableTable(tablename);
  20. admin.deleteTable(tablename);
  21. /********* End *********/
  22. }
  23. /**
  24. * 创建表
  25. * @param tableName 表名
  26. * @param columnNames 列族的动态数组
  27. * @throws Exception
  28. */
  29. public void createTable(String tableName,String... columnNames)throws Exception{
  30. /********* Begin *********/
  31. Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
  32. Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
  33. Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
  34. TableDescriptorBuilder test_teacher_info = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
  35. for(String s: columnNames){
  36. ColumnFamilyDescriptor of = ColumnFamilyDescriptorBuilder.of(s);
  37. test_teacher_info.setColumnFamily(of);
  38. }
  39. //构建
  40. TableDescriptor build = test_teacher_info.build();
  41. admin.createTable(build);
  42. /********* End *********/
  43. }
  44. /**
  45. * 启用表
  46. * @param tableName
  47. * @throws Exception
  48. */
  49. public void enableTable(String tableName) throws Exception{
  50. /********* Begin *********/
  51. Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
  52. Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
  53. Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
  54. TableName demoName = TableName.valueOf(Bytes.toBytes(tableName));
  55. admin.enableTable(demoName);
  56. /********* End *********/
  57. }
  58. /**
  59. * 禁用表
  60. * @param tableName
  61. */
  62. public void disableTable(String tableName)throws Exception{
  63. /********* Begin *********/
  64. Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
  65. Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象
  66. Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象
  67. TableName testName = TableName.valueOf(Bytes.toBytes(tableName));
  68. admin.disableTable(testName);
  69. /********* End *********/
  70. }
  71. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/419749
推荐阅读
相关标签
  

闽ICP备14008679号