Java连接hbase数据库需要两个类:
HBaseConfiguration
ConnectionFactory
HBaseConfiguration
要连接hbase,首先需要创建Configuration对象,这个对象需要通过HBaseConfiguration(HBase配置)对象来进行创建,这个类的用途就是读取指定路径下hbase-site.xml和hbase-default.xml的配置信息。
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
ConnectionFactory
获取到连接对象Connection就算连接上了hbase了,通过ConnectionFactory(连接工厂)的方法,就能获取到Connection(连接对象)了。
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
创建表
HBase1.X创建表
要创建表,首先需要一个Admin对象,然后让它来创建一张表
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象 TableName tableName = TableName.valueOf("test");//定义表名 HTableDescriptor htd = new HTableDescriptor(tableName);//定义表对象 HColumnDescriptor hcd = new HColumnDescriptor("data");//定义列族对象 htd.addFamily(hcd); //添加 admin.createTable(htd);//创建表
HBase2.X创建表
TableName tableName = TableName.valueOf("test");//定义表名 //TableDescriptor对象通过TableDescriptorBuilder构建; TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName); ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象 tableDescriptor.setColumnFamily(family);//设置列族 admin.createTable(tableDescriptor.build());//创建表
添加数据
要对一个表添加数据,需要一个put对象,在定义put对象之前我们需要获取到Table对象,这样才能对表进行操作。
Table table = connection.getTable(tableName);//获取Table对象 try { byte[] row = Bytes.toBytes("row1"); //定义行 Put put = new Put(row); //创建Put对象 byte[] columnFamily = Bytes.toBytes("data"); //列 byte[] qualifier = Bytes.toBytes(String.valueOf(1)); //列族修饰词 byte[] value = Bytes.toBytes("张三丰"); //值 put.addColumn(columnFamily, qualifier, value); table.put(put); //向表中添加数据 } finally { //使用完了要释放资源 table.close(); }
获取数据
获取指定行的数据
使用Get对象与Table对象就可以获取行row1的数据了。
Get get = new Get(Bytes.toBytes("row1")); //定义get对象 Result result = table.get(get); //通过table对象获取数据 System.out.println("Result: " + result); //很多时候我们只需要获取“值” 这里表示获取 data:1 列族的值 byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组 //将字节转成字符串 String valueStr = new String(valueBytes,"utf-8"); System.out.println("value:" + valueStr);
扫描表中的数据
如果要获取表中所有的数据应该使用Scan、ResultScanner对象。
Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); try { for (Result scannerResult: scanner) { System.out.println("Scan: " + scannerResult); byte[] row = scannerResult.getRow(); System.out.println("rowName:" + new String(row,"utf-8")); } } finally { scanner.close(); }
删除表
要删除表,需要先禁用它,然后再删除它。
TableName tableName = TableName.valueOf("test"); admin.disableTable(tableName); //禁用表 admin.deleteTable(tableName);
评论 抢沙发