使用java操作hbase

首页 » HBase » 使用java操作hbase

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);
分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

 



觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00