准备:
- Hbase单机或者集群环境
- 版本下载连接:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.2.1/hbase-2.2.1-bin.tar.gz
- 创建一个maven项目,maven 依赖 (见文章末尾)
代码实现:
- 创建资源连接对象和初始化连接信息
static Configuration conf; static Connection conn ; static Admin admin; static { conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.75.180"); try { conn = ConnectionFactory.createConnection(conf); admin = conn.getAdmin(); } catch (IOException e) { System.err.println("获取hbase 连接失败"); e.printStackTrace(); } }
- 创建Hbase表
/** * 创建 Hbase 表 * @param tableName * @throws IOException */ public static void createTable(TableName tableName) throws IOException{ if(!admin.tableExists(tableName)) { //表构建 TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName); //列族构建 列族创建一般不会超过三个,详情可参考官网 ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder1 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf")); ColumnFamilyDescriptor columnFamilyDescriptor1 = columnFamilyDescriptorBuilder1.build(); ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("af")); ColumnFamilyDescriptor columnFamilyDescriptor2 = columnFamilyDescriptorBuilder2.build(); //添加列族 tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor1); tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor2); TableDescriptor tableDescriptor = tableDescriptorBuilder.build(); //创建表 admin.createTable(tableDescriptor); }
- 单条数据插入
/** * 同一数据的插入 * @param tableName * @throws IOException */ public static void insertTable(TableName tableName) throws IOException{ Table tb = conn.getTable(tableName); Put puts = new Put(Bytes.toBytes("20191003")); puts.addColumn(Bytes.toBytes("af"), Bytes.toBytes("a1"), Bytes.toBytes("Hello")); puts.addColumn(Bytes.toBytes("af"), Bytes.toBytes("a2"), Bytes.toBytes("What")); puts.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("a3"), Bytes.toBytes("Are")); puts.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("a4"), Bytes.toBytes("Doing")); tb.put(puts); //批量插入 选用 tb.put(list<puts>); tb.close(); }
- 数据查询(scan)
/** * 全表扫描 * @param tableName * @throws IOException */ public static void scanTable(TableName tableName) throws IOException{ Table tb = conn.getTable(tableName); Scan scan = new Scan(); ResultScanner scanner = tb.getScanner(scan); for (Result rs : scanner) { String rowkey = Bytes.toString(rs.getRow()); System.out.println(rowkey); Cell[] rawCells = rs.rawCells(); for(Cell cell : rawCells) { System.out.println( Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength()) +" : " +Bytes.toString(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength()) ); } } scanner.close(); }
- 表删除
/** * 删除 Hbase 表 * @param tableName * @throws IOException */ public static void dropTable(TableName tableName) throws IOException{ if(admin.tableExists(tableName)) { admin.disableTable(tableName); admin.deleteTable(tableName); }else { System.out.println(tableName+" is not exists"); } }
- maven依赖
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>2.2.1</version> <type>pom</type> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-common --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-common</artifactId> <version>2.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>2.2.1</version> </dependency>