HBase的API操作
Java API
1、HBaseConfiguration:封装了hbase集群所有的配置信息(最终代码运行所需要的各种环境)
2、HBaseAdmin:HBase系统管理员的角色,对数据表进行操作或者管理的一些方法。
3、HTable:封装了整个表的所有的信息(表名,列簇的信息),提供了操作该表数据所欲的业务方法。
4、HTableDescriptor:所有列簇的信息(一到多个HColumnDescriptor)
5、HColumnDescriptor:封装一个列簇的信息
6、Cell:封装了Column的所有的信息:Rowkey、qualifier、value、时间戳
7、Put:插入操作所封装的必要的信息
8、Get:封装查询条件,table.get(Get get),返回一个Result
9、Delete:删除数据封装的所有的必要数据信息。
10、Result:封装了一个rowkey所对应的所有的数据信息
11、ResultScanner:封装了多个Result的结果集。
12、Scan: 封装查询信息,很get有一点不同,Scan可以设置Filter
导入Maven依赖
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
代码
HBaseOperate.java
//获取Configuration对象
public static Configuration conf;
static{
//使用HBaseConfiguration的单例方法实例化
//HBaseConfiguration:封装了hbase集群所有的配置信息(最终代码运行所需要的各种环境)
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "bigdata02:2181,bigdata03:2181,bigdata04:2181,bigdata04:2181");
}
1、判断表是否存在
//1、判断表是否存在
public static boolean isTableExist(String tableName) throws Exception{
//在HBase中管理、访问表需要先创建HBaseAdmin对象
//新方法
//Connection connection = ConnectionFactory.createConnection(conf);
//HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
//老方法简单
//HBaseAdmin:HBase系统管理员的角色,对数据表进行操作或者管理的一些方法。
HBaseAdmin admin = new HBaseAdmin(conf);
return admin.tableExists(tableName);
}
System.out.println(isTableExist("student"));
2、创建表
//2、创建表 ,String... columnFamily 是不定长参数,注意理解
public static void createTable(String tableName, String... columnFamily) throws Exception{
HBaseAdmin admin = new HBaseAdmin(conf);
//判断表是否存在
if(isTableExist(tableName)){
System.out.println("table: " + tableName + "已存在");
}else{
//创建表属性对象,表名需要转字节类型
//HTableDescriptor:所有列簇的信息(一到多个HColumnDescriptor)
HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
//创建多个列族
for(String cf : columnFamily){
descriptor.addFamily(new HColumnDescriptor(cf));
}
//根据对表的配置,创建表
admin.createTable(descriptor);
System.out.println("table: " + tableName + "创建成功!");
}
}
createTable("student2","info");
3、删除表
//3、删除表
public static void dropTable(String tableName) throws Exception{
HBaseAdmin admin = new HBaseAdmin(conf);
if(isTableExist(tableName)){
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("table: " + tableName + "删除成功");
}else{
System.out.println("table: " + tableName + "不存在");
}
}
dropTable("student");
4、向表中插入数据
//4、向表中插入数据
public static void addData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{
//创建HTable对象
HTable hTable = new HTable(conf, tableName);
//向表中插入数据
Put put = new Put(Bytes.toBytes(rowKey));
//向Put对象中组装数据
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
hTable.put(put);
hTable.close();
System.out.println("恭喜呀,插入数据成功啦");
}
addData("student2", "002", "info", "name", "mixiaomi");//注意增加数据,存在就是修改,不存在就是增加
addData("student2", "002", "info", "name", "mixiaomi");//注意增加数据,存在就是修改,不存在就是增加
addData("student2", "001", "info", "age", "30");
addData("student2", "001", "info", "school", "BUPT");
5、获取所有数据,也就是获取所有行
//5、获取所有数据,也就是获取所有行
public static void getAllData(String tableName) throws IOException{
//HTable:封装了整个表的所有的信息(表名,列簇的信息),提供了操作该表数据所有的业务方法。
HTable hTable = new HTable(conf, tableName);
//得到用于扫描region的对象scan
//Scan: 封装查询信息,很get有一点不同,Scan可以设置Filter
Scan scan = new Scan();
//使用HTable得到resultcanner实现类的对象
ResultScanner resultScanner = hTable.getScanner(scan);
for(Result result : resultScanner){
//Cell:封装了Column的所有的信息:Rowkey、qualifier、value、时间戳
Cell[] cells = result.rawCells();
for(Cell cell : cells){
System.out.println("行键: " + Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println("列簇: " + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列: " + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值: " + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println();
}
}
}
getAllData("student2");
6、获取某行数据
//6、获取某行数据
public static void getRowData(String tableName, String rowKey) throws IOException{
HTable table = new HTable(conf, tableName);
Get get = new Get(Bytes.toBytes(rowKey));
Result result = table.get(get);
//循环获取所有信息
for(Cell cell : result.rawCells()){
System.out.println("行键: " + Bytes.toString(result.getRow()));
System.out.println("列簇: " + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列: " + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值: " + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println("时间戳: " + cell.getTimestamp());
}
}
getRowData("student2","001");
7、获取某行指定的数据,比如指定某个列簇的某个列限定符
//7、获取某行指定的数据,比如指定某个列簇的某个列限定符
public static void getRowQualifierData(String tableName, String rowKey, String family, String qualifier) throws IOException{
HTable table = new HTable(conf, tableName);
Get get = new Get(Bytes.toBytes(rowKey));
get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
Result result = table.get(get);
//循环获取所有信息,也可以单独打印自己需要的字段即可,这个一般根据业务需求修改。
for(Cell cell : result.rawCells()){
System.out.println("行键:" + Bytes.toString(result.getRow()));
System.out.println("列簇" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
getRowQualifierData("student2", "001", "info", "school");
8、删除单行或多行数据
//8、删除单行或多行数据
public static void deleteRowsData(String tableName, String... rows) throws IOException{
HTable hTable = new HTable(conf, tableName);
List<Delete> deleteList = new ArrayList<Delete>();
//循环
for(String row : rows){
Delete delete = new Delete(Bytes.toBytes(row));
deleteList.add(delete);
}
hTable.delete(deleteList);
hTable.close();
}
deleteRowsData("student2", "002");
网友评论