1. /**
  2. * 1、namespace相关
  3. * 1、创建namespace: create_namespace '命名空间名称'
  4. * 2、查看所有的命名空间: list_namespace
  5. * 3、查看命名空间下所有表: list_namespace_tables '命名空间名称'
  6. * 4、删除命名空间[删除命名的时候,命名空间下不能有表,如果有表不能删除命名空间]: drop_namespace '命名空间名称'
  7. * 2、表相关
  8. * 1、创建表[版本默认为1]: create '表名','列簇名1','列簇2',..
  9. * 2、创建表,指定版本号: create '表名',{NAME=>'列簇名',VERSIONS=>版本数},...
  10. * 3、修改表: alter '表',{NAME=>'列簇名',VERSIONS=>版本数},..
  11. * 4、删除表:
  12. * 1、禁用表: disable '表名'
  13. * 2、删除表: drop '表名'
  14. * 5、启动表: enable '表名'
  15. * 6、查看所有表: list
  16. * 3、数据相关
  17. * 1、插入/修改数据: put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值
  18. * 2、查询数据
  19. * 1、根据rowkey查询单条数据:
  20. * 1、查询整行数据: get '命名空间名称:表名',rowkey
  21. * 2、查询某个列的数据: get '命名空间名称:表名',rowkey,'列簇名:列限定符名称'
  22. * 3、查看某个列簇的数据: get '命名空间名称:表名',rowkey,'列簇名'
  23. * 4、查看某个时间戳的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',TIMESTAMP=>时间戳}
  24. * 5、查看多个版本的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',VERSIONS=>版本数}
  25. * 2、扫描表
  26. * 1、查询整表数据: scan '命名空间名称:表名'
  27. * 2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'}
  28. * 3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'}
  29. * 4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数}
  30. * 5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey]
  31. * 3、删除数据
  32. * 1、delete: 只能删除单个cell
  33. * delete '命名空间名称:表名',rowkey,'列簇名:列限定符名称'
  34. * 2、deleteall: 可以删除单个cell也可以删除整行数据
  35. * 1、删除单个cell: deleteall '命名空间名称:表名',rowkey,'列簇名:列限定符名称'
  36. * 2、删除整行: deleteall '命名空间名称:表名',rowkey
  37. * 4、统计表的行数: count '命名空间名称:表名'
  38. * 5、清空表数据: truncate '命名空间名称:表名'
  39. */

初始化与关闭io流

  1. private Admin admin;
  2. private Connection connection;
  3. @Before
  4. public void init () throws Exception{
  5. //获取连接
  6. Configuration conf = HBaseConfiguration.create();
  7. conf.set("hbase.zookeeper.quorum","hadoop102:2181,hadoop103:2181,hadoop104:2181");
  8. connection = ConnectionFactory.createConnection(conf);
  9. //获取admin对象
  10. admin = connection.getAdmin();
  11. }
  12. @After
  13. public void close() throws Exception{
  14. //关闭
  15. admin.close();
  16. connection.close();
  17. }

createNamespace

  1. @Test
  2. public void createNamespace() throws IOException {
  3. //描述命名空间
  4. NamespaceDescriptor bigdata2 = NamespaceDescriptor.create("bigdata2").build();
  5. //创建
  6. admin.createNamespace(bigdata2);
  7. }

listNamespace

  1. @Test
  2. public void listNamespace() throws Exception{
  3. NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();
  4. for(NamespaceDescriptor des: namespaceDescriptors){
  5. System.out.println(des.getName());
  6. }
  7. }

listNamespaceTables

  1. @Test
  2. public void listNamespaceTables() throws Exception{
  3. TableName[] tableNames = admin.listTableNamesByNamespace("bigdata");
  4. for(TableName tableName: tableNames){
  5. System.out.println(tableName.getNameAsString());
  6. }
  7. }

dropNamespace

  1. @Test
  2. public void dropNamespace() throws Exception{
  3. //删除命名空间下所有表
  4. //获取命名空间下所有表
  5. TableName[] tables = admin.listTableNamesByNamespace("bigdata");
  6. for(TableName table: tables){
  7. //禁用表
  8. admin.disableTable(table);
  9. //删除表
  10. admin.deleteTable(table);
  11. //启动表
  12. //admin.enableTable(table);
  13. }
  14. //删除命名空间
  15. admin.deleteNamespace("bigdata");
  16. }

createTable

  1. @Test
  2. public void createTable() throws Exception{
  3. //描述列簇
  4. ColumnFamilyDescriptor f1 = ColumnFamilyDescriptorBuilder.newBuilder("f1".getBytes()).setMaxVersions(3).build();
  5. ColumnFamilyDescriptor f2 = ColumnFamilyDescriptorBuilder.newBuilder("f2".getBytes()).setMaxVersions(3).build();
  6. //描述表
  7. TableDescriptor build = TableDescriptorBuilder.newBuilder(TableName.valueOf("bigdata2:person4"))
  8. .setColumnFamily(f1)
  9. .setColumnFamily(f2)
  10. .build();
  11. //创建
  12. //admin.createTable(build);
  13. /* byte[][] splitkeys = { "aa".getBytes(),"bb".getBytes(),"cc".getBytes() };
  14. admin.createTable(build,splitkeys);*/
  15. admin.createTable(build,"1".getBytes(),"3".getBytes(),5);
  16. }

alterTable

  1. @Test
  2. public void alterTable() throws Exception{
  3. //描述列簇
  4. ColumnFamilyDescriptor f1 = ColumnFamilyDescriptorBuilder.newBuilder("f1".getBytes()).setMaxVersions(3).build();
  5. //ColumnFamilyDescriptor f2 = ColumnFamilyDescriptorBuilder.newBuilder("f2".getBytes()).setMaxVersions(3).build();
  6. //描述表
  7. TableDescriptor build = TableDescriptorBuilder.newBuilder(TableName.valueOf("bigdata2:person"))
  8. .setColumnFamily(f1)
  9. //.setColumnFamily(f2)
  10. .build();
  11. admin.modifyTable(build);
  12. }

put

  1. @Test
  2. public void put() throws Exception{
  3. //获取Table对象
  4. Table table = connection.getTable(TableName.valueOf("bigdata2:person"));
  5. // put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值
  6. //封装数据
  7. Put put = new Put("1001".getBytes());
  8. put.addColumn("f1".getBytes(),"name".getBytes(),"lisi".getBytes());
  9. put.addColumn("f1".getBytes(),"age".getBytes(), Bytes.toBytes(20));
  10. put.addColumn("f1".getBytes(),"address".getBytes(),"shenzhen".getBytes());
  11. //插入
  12. table.put(put);
  13. //关闭table对象
  14. table.close();
  15. }

putList

  1. @Test
  2. public void putList() throws Exception{
  3. //获取Table对象
  4. Table table = connection.getTable(TableName.valueOf("bigdata2:person"));
  5. // put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值
  6. //封装数据
  7. List<Put> list = new ArrayList<Put>();
  8. Put put = null;
  9. for(int i=0;i<=10;i++){
  10. put = new Put( ("100"+i).getBytes() );
  11. put.addColumn("f1".getBytes(),"name".getBytes(),("lisi-"+i).getBytes());
  12. put.addColumn("f1".getBytes(),"age".getBytes(),Bytes.toBytes(20+i));
  13. put.addColumn("f1".getBytes(),"address".getBytes(),("shenzhe-"+i).getBytes());
  14. list.add(put);
  15. }
  16. //插入
  17. table.put(list);
  18. //关闭
  19. table.close();
  20. }

get

  1. @Test
  2. public void get() throws Exception{
  3. //获取表对象
  4. Table table = connection.getTable(TableName.valueOf("bigdata2:person"));
  5. //封装数据
  6. //1、查询整行数据: get '命名空间名称:表名',rowkey
  7. //Get get = new Get("1001".getBytes());
  8. //2、查询某个列的数据: get '命名空间名称:表名',rowkey,'列簇名:列限定符名称'
  9. //Get get = new Get("1001".getBytes());
  10. //get.addColumn("f1".getBytes(),"name".getBytes());
  11. //3、查看某个列簇的数据: get '命名空间名称:表名',rowkey,'列簇名'
  12. //Get get = new Get("1001".getBytes());
  13. //get.addFamily("f1".getBytes());
  14. //4、查看某个时间戳的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',TIMESTAMP=>时间戳}
  15. Get get = new Get("1001".getBytes());
  16. get.addColumn("f1".getBytes(),"name".getBytes());
  17. //get.setTimestamp(1620887027129L);
  18. //5、查询多个版本数据
  19. get.readVersions(3);
  20. //查询,一个result逻辑结构上是一整行数据,在物力结构中是多行
  21. Result result = table.get(get);
  22. //结果展示
  23. List<Cell> cells = result.listCells();
  24. // 每个cell都是值,所以都是以字节数组的形式存储,所以要解码为字符串、
  25. // 解码:byte-->字符串
  26. // 编码:字符串-->byte
  27. for(Cell cell:cells){
  28. //获取rowkey
  29. String rowkey = new String(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
  30. //获取列簇
  31. String family = new String(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
  32. //获取列限定符
  33. String qualifier = new String(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
  34. //获取值,判断column,如果是int型不能放进Sting()类中。
  35. if(family.equals("f1") && qualifier.equals("age") ){
  36. int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
  37. System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value);
  38. }else{
  39. String value = new String(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
  40. System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value);
  41. }
  42. }
  43. //关闭
  44. table.close();
  45. }

scan

  1. /**
  2. * 扫描数据
  3. * 1、查询整表数据: scan '命名空间名称:表名'
  4. * 2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'}
  5. * 3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'}
  6. * 4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数}
  7. * 5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey]
  8. * @throws Exception
  9. */
  10. @Test
  11. public void scan() throws Exception{
  12. //获取表对象
  13. Table table = connection.getTable(TableName.valueOf("bigdata2:person"));
  14. //封装数据
  15. //1、查询整表
  16. Scan scan = new Scan();
  17. //2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'}
  18. //scan.addColumn("f1".getBytes(),"name".getBytes());
  19. //3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'}
  20. scan.addFamily("f1".getBytes());
  21. //4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数}
  22. scan.readVersions(3);
  23. //5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey]
  24. scan.withStartRow("1001".getBytes(),false);
  25. scan.withStopRow("1002".getBytes(),true);
  26. //查询
  27. ResultScanner scanner = table.getScanner(scan);
  28. //结果展示
  29. Iterator<Result> it = scanner.iterator();
  30. while (it.hasNext()){
  31. Result row = it.next();
  32. List<Cell> cells = row.listCells();
  33. for(Cell cell:cells){
  34. //获取rowkey
  35. String rowkey = new String(CellUtil.cloneRow(cell));
  36. //获取列簇
  37. String family = new String(CellUtil.cloneFamily(cell));
  38. //获取列限定符
  39. String qualifier = new String(CellUtil.cloneQualifier(cell));
  40. //获取值
  41. if(family.equals("f1") && qualifier.equals("age") ){
  42. int value = Bytes.toInt(CellUtil.cloneValue(cell));
  43. System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value);
  44. }else{
  45. String value = new String(CellUtil.cloneValue(cell));
  46. System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value);
  47. }
  48. }
  49. }
  50. //关闭
  51. table.close();
  52. }

delete

  1. @Test
  2. public void delete() throws Exception{
  3. //获取表对象
  4. Table table = connection.getTable(TableName.valueOf("bigdata2:person"));
  5. //封装数据
  6. //删除整行
  7. Delete delete = new Delete("10010".getBytes());
  8. //删除单个Cell
  9. //delete.addColumn("f1".getBytes(),"name".getBytes());
  10. //删除列簇
  11. delete.addFamily("f1".getBytes());
  12. //删除
  13. table.delete(delete);
  14. //关闭
  15. table.close();
  16. }

truncate

  1. @Test
  2. public void truncate() throws Exception{
  3. if( admin.tableExists(TableName.valueOf("bigdata2:person"))){
  4. //禁用表
  5. admin.disableTable(TableName.valueOf("bigdata2:person"));
  6. //清空表
  7. admin.truncateTable(TableName.valueOf("bigdata2:person"),false);
  8. }
  9. }