Hbase API
准备工作
IDEA新建maven工程,下载maven并导入maven依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.1</version>
</dependency>
Namespace-DDL
1. Junit执行代码模板
public class NamespaceHandler {
private Admin admin;
@Before
public void getAdmin() {
admin = HbaseUtil.getAdmin();
}
@After
public void closeAdmin() {
HbaseUtil.closeAdmin(admin);
}
}
2. 创建namespace的API
@Test
public void createNamespace() {
try {
//获取namespace描述器对象
NamespaceDescriptor descriptor = NamespaceDescriptor.create("ns1").build();
//提交到hbase中,进行创建
admin.createNamespace(descriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
3. 列出所有的namespace
@Test
public void listNamespace() {
try {
//通过客户端,获取namespace的描述器数组
NamespaceDescriptor[] nss = admin.listNamespaceDescriptors();
for (NamespaceDescriptor descriptor : nss) {
//遍历描述器进行打印名称
System.out.println(descriptor.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
4. 列出所有namespace中的表名
@Test
public void listNamespaceTable(){
try {
//通过客户端,获取namespace的描述器数组
NamespaceDescriptor[] nss = admin.listNamespaceDescriptors();
for (NamespaceDescriptor descriptor : nss) {
System.out.println("-------名称空间: " + descriptor.getName() + "-----------");
//通过客户端,并指定namespace,来获取相应表描述器的数组,进行遍历
HTableDescriptor[] tss = admin.listTableDescriptorsByNamespace(descriptor.getName());
for (HTableDescriptor t : tss) {
System.out.println(t.getTableName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
或者
@Test
public void listNamespaceTable1(){
try {
// 通过客户端,获取所有的TableName,进行遍历
TableName[] ts = admin.listTableNames();
for (TableName t : ts) {
System.out.println(t.getNameAsString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
5. 修改namespace的属性信息
@Test
public void alterNamespace() {
try {
//获取指定namespace的描述器
NamespaceDescriptor descriptor = admin.getNamespaceDescriptor("ns1");
//设置属性
descriptor.setConfiguration("author","灰哀之雪");
descriptor.setConfiguration("company","apple");
descriptor.setConfiguration("comment","good");
//进行提交修改
admin.modifyNamespace(descriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
6. 删除namespace
@Test
public void deleteNamespace(){
try {
//删除指定的namespace
admin.deleteNamespace("ns1");
} catch (IOException e) {
e.printStackTrace();
}
}
Table-DDL
1. Junit执行代码模板
public class TableHandler {
private Admin admin;
@Before
public void getAdmin() {
admin = HbaseUtil.getAdmin();
}
@After
public void closeAdmin() {
HbaseUtil.closeAdmin(admin);
}
}
2. 创建一个table
@Test
public void creatTable() {
try {
//获取TableName对象,指定要创建的表名
TableName tableName = TableName.valueOf("ns1:emp");
//新建一个表描述器
HTableDescriptor descriptor = new HTableDescriptor(tableName);
//新建一个列族描述器
HColumnDescriptor columnDescriptor = new HColumnDescriptor("f1");
//设置列族的布隆过滤器为行类型 ROW 列 ROWCOL
columnDescriptor.setBloomFilterType(BloomType.ROW);
//设置列族支持缓存
columnDescriptor.setInMemory(true);
//设置列族内的单元格支持2个版本
columnDescriptor.setVersions(1, 2);
//设置列族的单元格过期时间为7天
columnDescriptor.setTimeToLive(7 * 24 * 60 * 60);
//将列族描述器添加到表描述器中, 可以添加多个列族描述器
descriptor.addFamily(columnDescriptor);
//提交到Hbase,进行创建
admin.createTable(descriptor);
} catch (Exception e) {
e.printStackTrace();
}
}
3. 修改table的列族属性信息
@Test
public void alterTable1(){
try {
//指定表名
TableName tableName = TableName.valueOf("ns1:emp");
//获取表描述器
HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
//获取指定的列族的描述器
HColumnDescriptor columnDescriptor = tableDescriptor.getFamily(Bytes.toBytes("f1"));
//修改属性
columnDescriptor.setBloomFilterType(BloomType.ROWCOL);
columnDescriptor.setVersions(1,2);
columnDescriptor.setTimeToLive(24*60*60);
//提交到Hbase
admin.addColumn(tableName,columnDescriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
4. 向table中添加新的列族
@Test
public void alterTable2(){
try {
//获取TableName对象,指定要创建的表名
TableName tableName = TableName.valueOf("ns1:emp");
//新建一个表描述器
HColumnDescriptor columnDescriptor = new HColumnDescriptor("f2");
//设置列族的布隆过滤器为列类型
columnDescriptor.setBloomFilterType(BloomType.ROWCOL);
//设置列族内的单元格支持的版本
columnDescriptor.setVersions(1,5);
//设置列族的单元格过期时间
columnDescriptor.setTimeToLive(2*24*60*60); // 秒为单位
//提交到Hbase
admin.addColumn(tableName,columnDescriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
5. 获取table的描述信息
@Test
public void describeTable(){
try {
//获取Table对象
TableName tableName = TableName.valueOf("ns1:emp");
//获取表描述器
HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
//获取列族数组
HColumnDescriptor[] hcs = descriptor.getColumnFamilies();
//遍历输出
for (HColumnDescriptor hc : hcs) {
System.out.println("NAME => "+hc.getNameAsString()+"\t");
System.out.println("BLOOMFILTER => "+hc.getBloomFilterType()+"\t");
System.out.println("VERSIONS => "+hc.getMaxVersions()+"\t");
System.out.println("TTL => "+hc.getTimeToLive()+"\t");
System.out.println("BLOCKSIZE => "+hc.getBlocksize()+"\t");
}
} catch (IOException e) {
e.printStackTrace();
}
}
6. 删除table
@Test
public void dropTable(){
try {
TableName tableName = TableName.valueOf("ns1:emp");
if(admin.tableExists(tableName)){
if(!admin.isTableDisabled(tableName)){
//先禁用表
admin.disableTable(tableName);
}
//删除表
admin.deleteTable(tableName);
}
} catch (IOException e) {
e.printStackTrace();
}
}
Table_CRUD(DML+DQL)
1. Junit执行代码模板
public class TableCRUDHandler {
private Table table;
@Before
public void getAdmin(){
table = HbaseUtil.getTable("ns1:emp");
}
@After
public void close(){
HbaseUtil.closeTable(table);
}
}
2. 向table中添加数据:put
@Test
public void putData(){
try {
//1. 获取Put对象,指定rowkey
Put put = new Put(Bytes.toBytes("rk00001"));
//2. 指定列族名,列名,列值
put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhangfei"));
put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("15"));
put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("gender"),Bytes.toBytes("m"));
//3. 提交
table.put(put);
} catch (IOException e) {
e.printStackTrace();
}
}
3. 批量增加数据
@Test
public void putData2(){
List<Put> list = new ArrayList<>();
try {
Put put1 = new Put(Bytes.toBytes("rk00002"));
put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhenji"));
put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("23"));
put1.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("gender"),Bytes.toBytes("f"));
Put put2 = new Put(Bytes.toBytes("rk00003"));
put2.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("zhaoyun"));
put2.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes("25"));
put2.addColumn(Bytes.toBytes("f1"