使用java连接Hbase数据库
要连接HBase我们首先需要创建Configuration对象,这个对象我们需要通过HBaseConfiguration(HBase配置)对象来进行创建,HBaseConfiguration看名字我们就能猜到它的用途:读取指定路径下hbase-site.xml和hbase-default.xml的配置信息。
具体用法:
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象ConnectionFactory
获取到连接对象Connextion我们就算连接上了HBase了,怎么获取呢?
通过ConnectionFactory(连接工厂)的方法我们就能获取到Connection(连接对象)了。
具体用法:
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
使用这两个步骤就能完成连接HBase了。
1.创建表
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);//创建表
2.添加数据
要对一个表添加数据,我们需要一个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();
}
3.获取数据
获取指定行的数据
使用Get对象与Table对象就可以获取到表中的数据了。
//获取数据
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);
上述代码就可以查到table对象中行row1的数据了,亲自试试验证一下结果吧。
扫描表中的数据
使用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();
}
4.删除表
和HBase shell的操作一样,在Java中我们要删除表,需要先禁用他,然后在删除它。
代码很简单:
TableName tableName = TableName.valueOf(“test”);
admin.disableTable(tableName); //禁用表
admin.deleteTable(tableName); //删除表