美文网首页hbase
HBase的javaAPI和高级用法

HBase的javaAPI和高级用法

作者: 傻疯子 | 来源:发表于2021-12-05 17:57 被阅读0次
常用的类使用说明

Configuration:用于指定配置

Connection:用于获取HBase连接,通过ConnectionFactory创建,调用getAdmin()获取Admin以得到管理权力,调用getTable可以获取table对象

Admin:可以调用createTable、deleteTable操作表

Table:可以调用get、put、delete、scan操作表数据

获取HBase的连接与关闭
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort", "zookeeper端口号");
configuration.set("hbase.zookeeper.quorum", "zookeeperIP");
configuration.set("hbase.master", "HBaseMaster的IP:端口号");
Connection connection = ConnectionFactory.createConnection(configuration);
connection.close();

获取Table与关闭
//需要获取与HBase的连接
Table table = connection.getTable(TableName.valueOf(tableName));
table.close();
获取Admin与关闭
//需要获取与HBase的连接
Admin admin = connection.getAdmin();
admin.close();
对表数据的增删查
//以下操作需要先获取Table对象

//添加数据
Put put =new Put(Bytes.toBytes('指定行键'));
//需要在addColumn方法里分别传入列族,列和值
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("student_id"),Bytes.toBytes(student_id));
//执行添加数据
table.put(put);

//删除数据
Delete delete   = new Delete(Bytes.toBytes('指定行键'));
//下面一行可以指定删除哪一个列族中的哪一列
//delete.addColumn(Bytes.toBytes("info"),Bytes.toBytes("student_id"));
//执行操作
table.delete(delete);


//查询数据
Get get = new Get(Bytes.toBytes("指定行键"));
// 下面用以指定获取的哪个行键中的列,不指定则返回所有
//get.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"));

//执行查询并获取返回结果
Result result = table.get(get);
//listCells可以获取所有cell
List<Cell> cells = result.listCells();
for (Cell cell: cells) {

    //获取列族
    byte[] family_bytes = CellUtil.cloneFamily(cell);
    //获取列
    byte[] column_bytes = CellUtil.cloneQualifier(cell);
    //获取值
    byte[] value_bytes = CellUtil.cloneValue(cell);
    //需将字节类型转换为字符串类型
    System.out.println("列族:"+new String(family_bytes)+",列:"+new String(column_bytes)+",值:"+new String(value_bytes));
}

//也直接可以使用getValue直接获取指定列族中指定列的数据
//需传入列族和列
byte[] age_bytes = result.getValue(Bytes.toBytes("info"),Bytes.toBytes("age"));

//查询多版本数据
Get get = new Get(Bytes.toBytes("指定行键"));

//获取所有历史版本的数据,如果不设置以下内容则只获取最新版本数据
get.readAllVersions();
//获取最新3个历史版本的数据
//get.readVersions(3);

//执行查询并获取返回结果
Result result = table.get(get);

//获取指定列族指定列的所有查询到的版本数据
List<Cell> columnCells = result.getColumnCells(Bytes.toBytes("列族"), Bytes.toBytes("列"));
for (Cell cell :columnCells) {
    byte[] value_bytes = CellUtil.cloneValue(cell);
    long timestamp = cell.getTimestamp();
    System.out.println("值为:"+new String(value_bytes)+",时间戳:"+timestamp);
}
对表的操作
//需先获取Admin对象

//创建表
//指定列族信息
ColumnFamilyDescriptor familyDesc = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("新建列族名"))
        .setMaxVersions(3)
        .build();
//列族集合,需要创建几个添加几个
ArrayList<ColumnFamilyDescriptor> familyList = new ArrayList<ColumnFamilyDescriptor>();
familyList.add(familyDesc);

//获取TableDescriptor对象,指定表名和列族
TableDescriptor desc = TableDescriptorBuilder.newBuilder(TableName.valueOf("新建表名"))
        .setColumnFamilies(familyList)
        .build();
//执行创建表
admin.createTable(desc);


删除表
//禁用表再删除
admin.disableTable(TableName.valueOf("指定表名"));
admin.deleteTable(TableName.valueOf("指定表名"));

列族设置
//设置列族生存时间,超时后在大合并时被删除
create '新建表名', {NAME => '新建列名', TTL => '指定时间秒'}

//设置列族版本数,大合并时早期版本会被删除
create '新建表名', {NAME => '新建列名', VERSIONS => 3}

设置列族压缩格式,常见的有LZO、SNAPPY和GZIP
create '新建表名', {NAME => '新建列名', COMPRESSION => '压缩格式'}

//设置列族数据块大小
create '新建表名', {NAME => '新建列名', BLOCKSIZE => '大小'}

//设置列族数据块缓存是否开启
create '新建表名', {NAME => '新建列名', BLOCKCACHE => '大小'}

//设置列族布隆过滤器,默认为ROW行级布隆过滤器
create '新建表名', {NAME => '新建列名', BLOOMFILTER => 'ROWCOL'}

扫描全表

扫描全表可以指定列族和列,也可以筛选版本和数据,还可以指定和结束的行键,结合需要查对应的api

批量导入

1.使用MapReduce直接导入
将数据在map阶段传入Put,然后结合封装好的类TableMapReduceUtil。initTableReduceJob进行导入。

2.使用BulkLoad
将数据通过MapReduce转换为HFile文件,再通过hbase org.apache.hadoop.hbase.tool.BulkLoadHFilesTool加载到表中

批量导出

1.结合封装好的类和方法TableMapReduceUtil.initTableMapperJob通过MapReduce将数据导出

2.通过hbase org.apache.hadoop.hbase.mapreduce.Export进行数据导出

相关文章

  • HBase的javaAPI和高级用法

    常用的类使用说明 Configuration:用于指定配置 Connection:用于获取HBase连接,通过Co...

  • 尚硅谷大数据技术之HBase

    6.3 MapReduce通过HBase的相关JavaAPI,我们可以实现伴随HBase操作的MapReduce过...

  • HBase JavaAPI

    添加依赖 判断表是否存在 旧API 新API 创建表 删除表 新增和修改 查询数据 删除数据

  • HBase MapReduce

    通过HBase的相关JavaAPI,我们可以实现伴随HBase操作的MapReduce过程,比如使用MapRedu...

  • hbase的javaapi

    pom.xml里添加依赖添加依赖org.apache.hbase

  • HBase之API

    0.用途 通过HBase的相关JavaAPI可以实现伴随HBase操作的MapReduce过程,比如使用MapRe...

  • HBASE

    HBASE操作JAVAAPI操作HBASE添加maven依赖: 通过相应的语法进行操作:一、连接:1、通过创建co...

  • javaapi 访问 hbase

    Hbase介绍HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC S...

  • javaAPI操作HBase

    平台:window+linux工具:IDEA2016 POM.XML为

  • javaapi 访问 hbase

    Hbase介绍HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC S...

网友评论

    本文标题:HBase的javaAPI和高级用法

    本文链接:https://www.haomeiwen.com/subject/vjaixrtx.html