本文共 2971 字,大约阅读时间需要 9 分钟。
HBase 是一款流行的分布式、面向列的数据库,在实际项目中常被用于存储非结构化数据。本文将介绍 HBase 的 DDL(数据定义语言)和 DML(数据操作语言)操作,包括表的增删改查等常用操作。
在 HBase 中,定义表格(DDL)主要通过 Admin 类完成。以下是常用的操作方法:
建立连接
首先需要构建一个连接对象,连接 HBase 的 zk 集群地址。例如:Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "ip1:2181,ip2:2181,ip3:2181");Connection conn = ConnectionFactory.createConnection(conf);获取 DDL 操作器
通过连接获取Admin 实例:Admin admin = conn.getAdmin();
创建表格
使用HTableDescriptor 描述表结构并创建表格:HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("table_info"));HColumnDescriptor columnDescriptor = new HColumnDescriptor("column_info");columnDescriptor.setMaxVersions(3); // 设置列族最大版本数tableDescriptor.addFamily(columnDescriptor);admin.createTable(tableDescriptor);禁用表格
需要注意的是,禁用表格和删除表格是分开操作:admin.disableTable(TableName.valueOf("user_info")); // 停用表admin.deleteTable(TableName.valueOf("user_info")); // 删除表修改表结构
通过modifyTable 方法动态调整表结构:HTableDescriptor tableDescriptor = admin.getTableDescriptor(TableName.valueOf("table_info"));HColumnDescriptor newColumnDescriptor = new HColumnDescriptor("another_info");newColumnDescriptor.setBloomFilterType(BloomType.ROWCOL); // 设置布隆过滤器类型tableDescriptor.addFamily(newColumnDescriptor);admin.modifyTable(tableDescriptor);数据操作(DML)主要包括插入、删除、更新和查询数据。以下是常用的操作方法:
插入数据
使用Put 类插入数据:Table table = conn.getTable(TableName.valueOf("table_info"));Put put = new Put("001".getBytes());put.addColumn("base_info".getBytes(), "username".getBytes(), "xiaowang".getBytes());Put put2 = new Put("002".getBytes());put2.addColumn("base_info".getBytes(), "username".getBytes(), "xiaowei".getBytes());table.put(put, put2);删除数据
使用Delete 类删除数据:Delete delete = new Delete("001".getBytes());Delete delete2 = new Delete("002".getBytes());delete2.addColumn("table_info".getBytes(), "username".getBytes());table.delete(delete, delete2);查询数据
使用Get 类获取单行数据:Get get = new Get("002".getBytes());Result result = table.get(get);byte[] value = result.getValue("base_info".getBytes(), "age".getBytes());System.out.println(new String(value));扫描数据
使用Scan 类批量读取数据:Scan scan = new Scan("10".getBytes(), "10000\001".getBytes());ResultScanner scanner = table.getScanner(scan);Iterator iterator = scanner.iterator();while(iterator.hasNext()){ Result result = iterator.next(); CellScanner cellScanner = result.cellScanner(); while(cellScanner.advance()){ Cell cell = cellScanner.current(); // 输出当前 KV 对应的信息 System.out.println("行键: " + new String(cell.getRowArray())); System.out.println("列族名: " + new String(cell.getFamilyArray())); System.out.println("列名: " + new String(cell.getQualifierArray())); System.out.println("值: " + new String(cell.getValueArray())); }} 表结构设计
在创建表格前,需要明确表的名称和各列的名称、类型等信息,并根据实际需求选择合适的存储方式。数据类型选择
HBase 的列可以存储多种数据类型,如字符串、数字、布尔值等,具体选择根据数据需求来定。性能优化
在高并发场景下,可以通过设置合适的 BloomFilter、压缩类型等来提升查询性能。通过以上操作,可以对 HBase 表格进行增删改查操作,灵活地管理数据。
转载地址:http://grefk.baihongyu.com/