常用的类使用说明
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进行数据导出









网友评论