/** * 1、namespace相关 * 1、创建namespace: create_namespace '命名空间名称' * 2、查看所有的命名空间: list_namespace * 3、查看命名空间下所有表: list_namespace_tables '命名空间名称' * 4、删除命名空间[删除命名的时候,命名空间下不能有表,如果有表不能删除命名空间]: drop_namespace '命名空间名称' * 2、表相关 * 1、创建表[版本默认为1]: create '表名','列簇名1','列簇2',.. * 2、创建表,指定版本号: create '表名',{NAME=>'列簇名',VERSIONS=>版本数},... * 3、修改表: alter '表',{NAME=>'列簇名',VERSIONS=>版本数},.. * 4、删除表: * 1、禁用表: disable '表名' * 2、删除表: drop '表名' * 5、启动表: enable '表名' * 6、查看所有表: list * 3、数据相关 * 1、插入/修改数据: put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值 * 2、查询数据 * 1、根据rowkey查询单条数据: * 1、查询整行数据: get '命名空间名称:表名',rowkey * 2、查询某个列的数据: get '命名空间名称:表名',rowkey,'列簇名:列限定符名称' * 3、查看某个列簇的数据: get '命名空间名称:表名',rowkey,'列簇名' * 4、查看某个时间戳的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',TIMESTAMP=>时间戳} * 5、查看多个版本的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',VERSIONS=>版本数} * 2、扫描表 * 1、查询整表数据: scan '命名空间名称:表名' * 2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'} * 3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'} * 4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数} * 5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey] * 3、删除数据 * 1、delete: 只能删除单个cell * delete '命名空间名称:表名',rowkey,'列簇名:列限定符名称' * 2、deleteall: 可以删除单个cell也可以删除整行数据 * 1、删除单个cell: deleteall '命名空间名称:表名',rowkey,'列簇名:列限定符名称' * 2、删除整行: deleteall '命名空间名称:表名',rowkey * 4、统计表的行数: count '命名空间名称:表名' * 5、清空表数据: truncate '命名空间名称:表名' */
初始化与关闭io流
private Admin admin; private Connection connection; @Before public void init () throws Exception{ //获取连接 Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","hadoop102:2181,hadoop103:2181,hadoop104:2181"); connection = ConnectionFactory.createConnection(conf); //获取admin对象 admin = connection.getAdmin(); } @After public void close() throws Exception{ //关闭 admin.close(); connection.close(); }
createNamespace
@Test public void createNamespace() throws IOException { //描述命名空间 NamespaceDescriptor bigdata2 = NamespaceDescriptor.create("bigdata2").build(); //创建 admin.createNamespace(bigdata2); }
listNamespace
@Test public void listNamespace() throws Exception{ NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors(); for(NamespaceDescriptor des: namespaceDescriptors){ System.out.println(des.getName()); } }
listNamespaceTables
@Test public void listNamespaceTables() throws Exception{ TableName[] tableNames = admin.listTableNamesByNamespace("bigdata"); for(TableName tableName: tableNames){ System.out.println(tableName.getNameAsString()); } }
dropNamespace
@Test public void dropNamespace() throws Exception{ //删除命名空间下所有表 //获取命名空间下所有表 TableName[] tables = admin.listTableNamesByNamespace("bigdata"); for(TableName table: tables){ //禁用表 admin.disableTable(table); //删除表 admin.deleteTable(table); //启动表 //admin.enableTable(table); } //删除命名空间 admin.deleteNamespace("bigdata"); }
createTable
@Test public void createTable() throws Exception{ //描述列簇 ColumnFamilyDescriptor f1 = ColumnFamilyDescriptorBuilder.newBuilder("f1".getBytes()).setMaxVersions(3).build(); ColumnFamilyDescriptor f2 = ColumnFamilyDescriptorBuilder.newBuilder("f2".getBytes()).setMaxVersions(3).build(); //描述表 TableDescriptor build = TableDescriptorBuilder.newBuilder(TableName.valueOf("bigdata2:person4")) .setColumnFamily(f1) .setColumnFamily(f2) .build(); //创建 //admin.createTable(build);/* byte[][] splitkeys = { "aa".getBytes(),"bb".getBytes(),"cc".getBytes() }; admin.createTable(build,splitkeys);*/ admin.createTable(build,"1".getBytes(),"3".getBytes(),5); }
alterTable
@Test public void alterTable() throws Exception{ //描述列簇 ColumnFamilyDescriptor f1 = ColumnFamilyDescriptorBuilder.newBuilder("f1".getBytes()).setMaxVersions(3).build(); //ColumnFamilyDescriptor f2 = ColumnFamilyDescriptorBuilder.newBuilder("f2".getBytes()).setMaxVersions(3).build(); //描述表 TableDescriptor build = TableDescriptorBuilder.newBuilder(TableName.valueOf("bigdata2:person")) .setColumnFamily(f1) //.setColumnFamily(f2) .build(); admin.modifyTable(build); }
put
@Test public void put() throws Exception{ //获取Table对象 Table table = connection.getTable(TableName.valueOf("bigdata2:person")); // put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值 //封装数据 Put put = new Put("1001".getBytes()); put.addColumn("f1".getBytes(),"name".getBytes(),"lisi".getBytes()); put.addColumn("f1".getBytes(),"age".getBytes(), Bytes.toBytes(20)); put.addColumn("f1".getBytes(),"address".getBytes(),"shenzhen".getBytes()); //插入 table.put(put); //关闭table对象 table.close(); }
putList
@Test public void putList() throws Exception{ //获取Table对象 Table table = connection.getTable(TableName.valueOf("bigdata2:person")); // put '命名空间名称:表名',rowkey,'列簇名:列限定符名称',值 //封装数据 List<Put> list = new ArrayList<Put>(); Put put = null; for(int i=0;i<=10;i++){ put = new Put( ("100"+i).getBytes() ); put.addColumn("f1".getBytes(),"name".getBytes(),("lisi-"+i).getBytes()); put.addColumn("f1".getBytes(),"age".getBytes(),Bytes.toBytes(20+i)); put.addColumn("f1".getBytes(),"address".getBytes(),("shenzhe-"+i).getBytes()); list.add(put); } //插入 table.put(list); //关闭 table.close(); }
get
@Test public void get() throws Exception{ //获取表对象 Table table = connection.getTable(TableName.valueOf("bigdata2:person")); //封装数据 //1、查询整行数据: get '命名空间名称:表名',rowkey //Get get = new Get("1001".getBytes()); //2、查询某个列的数据: get '命名空间名称:表名',rowkey,'列簇名:列限定符名称' //Get get = new Get("1001".getBytes()); //get.addColumn("f1".getBytes(),"name".getBytes()); //3、查看某个列簇的数据: get '命名空间名称:表名',rowkey,'列簇名' //Get get = new Get("1001".getBytes()); //get.addFamily("f1".getBytes()); //4、查看某个时间戳的数据: get '命名空间名称:表名',rowkey,{COLUMN=>'列簇名:列限定符名称',TIMESTAMP=>时间戳} Get get = new Get("1001".getBytes()); get.addColumn("f1".getBytes(),"name".getBytes()); //get.setTimestamp(1620887027129L); //5、查询多个版本数据 get.readVersions(3); //查询,一个result逻辑结构上是一整行数据,在物力结构中是多行 Result result = table.get(get); //结果展示 List<Cell> cells = result.listCells(); // 每个cell都是值,所以都是以字节数组的形式存储,所以要解码为字符串、 // 解码:byte-->字符串 // 编码:字符串-->byte for(Cell cell:cells){ //获取rowkey String rowkey = new String(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()); //获取列簇 String family = new String(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()); //获取列限定符 String qualifier = new String(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()); //获取值,判断column,如果是int型不能放进Sting()类中。 if(family.equals("f1") && qualifier.equals("age") ){ int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value); }else{ String value = new String(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value); } } //关闭 table.close(); }
scan
/** * 扫描数据 * 1、查询整表数据: scan '命名空间名称:表名' * 2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'} * 3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'} * 4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数} * 5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey] * @throws Exception */ @Test public void scan() throws Exception{ //获取表对象 Table table = connection.getTable(TableName.valueOf("bigdata2:person")); //封装数据 //1、查询整表 Scan scan = new Scan(); //2、查询查询某个列的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名:列限定符名称'} //scan.addColumn("f1".getBytes(),"name".getBytes()); //3、查看某个列簇的数据: scan '命名空间名称:表名',{COLUMNS=>'列簇名'} scan.addFamily("f1".getBytes()); //4、查看多个版本的数据:scan '命名空间名称:表名',{COLUMNS=>'列簇名',VERSIONS=>版本数} scan.readVersions(3); //5、查看指定rowkey范围段的数据: scan '命名空间名称:表名',{STARTKEY=>起始rowkey,STOPKEY=>结束rowkey} [查询结果不包含stopkey] scan.withStartRow("1001".getBytes(),false); scan.withStopRow("1002".getBytes(),true); //查询 ResultScanner scanner = table.getScanner(scan); //结果展示 Iterator<Result> it = scanner.iterator(); while (it.hasNext()){ Result row = it.next(); List<Cell> cells = row.listCells(); for(Cell cell:cells){ //获取rowkey String rowkey = new String(CellUtil.cloneRow(cell)); //获取列簇 String family = new String(CellUtil.cloneFamily(cell)); //获取列限定符 String qualifier = new String(CellUtil.cloneQualifier(cell)); //获取值 if(family.equals("f1") && qualifier.equals("age") ){ int value = Bytes.toInt(CellUtil.cloneValue(cell)); System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value); }else{ String value = new String(CellUtil.cloneValue(cell)); System.out.println("rowkey="+rowkey+",family="+family+",qualifier="+qualifier+",value="+value); } } } //关闭 table.close(); }
delete
@Test public void delete() throws Exception{ //获取表对象 Table table = connection.getTable(TableName.valueOf("bigdata2:person")); //封装数据 //删除整行 Delete delete = new Delete("10010".getBytes()); //删除单个Cell //delete.addColumn("f1".getBytes(),"name".getBytes()); //删除列簇 delete.addFamily("f1".getBytes()); //删除 table.delete(delete); //关闭 table.close(); }
truncate
@Test public void truncate() throws Exception{ if( admin.tableExists(TableName.valueOf("bigdata2:person"))){ //禁用表 admin.disableTable(TableName.valueOf("bigdata2:person")); //清空表 admin.truncateTable(TableName.valueOf("bigdata2:person"),false); } }