HBase的JAVA客户端API简单使用,及工具类编写
package com.utils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class HBaseUtil {
public static Connection getHBaseConnection() throws Exception {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","j01:2181,j02:2181,j03:2181");
Connection conn = ConnectionFactory.createConnection(conf);
return conn;
}
public static Admin getHBaseAmin(Connection conn) throws Exception {
return conn.getAdmin();
}
public static Table getHBaseTableName(Connection conn,String tablename) throws Exception {
Table table = conn.getTable(TableName.valueOf(tablename));
return table;
}
public static void showData(Result result){
while(result.advance()){
Cell cell = result.current();
String row = new String(CellUtil.cloneRow(cell));
String family = new String(CellUtil.cloneFamily(cell));
String qualifier = new String(CellUtil.cloneQualifier(cell));
String value = new String(CellUtil.cloneValue(cell));
System.out.println(row+"->"+family+":"+qualifier+"->"+value);
}
}
public static void deleteTable(String tablename) throws Exception {
Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());
TableName tb = TableName.valueOf("tablename");
if(admin.tableExists(tb)){
admin.disableTable(tb);
if (admin.isTableDisabled(tb)){
admin.deleteTable(tb);
}else{
System.out.println("please disable table:" + tablename);
}
}else{
System.out.println("this table:" + tablename + " is not exits");
}
admin.close();
}
public static void modifyTableStructrue(String tableName,String columnFamilyName,int columnFamilyVersion) throws Exception {
Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());
cfdb.setMaxVersions(columnFamilyVersion);
ColumnFamilyDescriptor cfd = cfdb.build();
TableName tb = TableName.valueOf(tableName);
if(admin.tableExists(tb)){
admin.modifyColumnFamily(tb,cfd);
}
admin.close();
}
public static void createCustomRegions(String tableName,String columnFamilyName,String...regionNum) throws Exception {
Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());
TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());
ColumnFamilyDescriptor cfd = cfdb.build();
tdb.setColumnFamily(cfd);
TableDescriptor td = tdb.build();
byte[][] by = new byte[regionNum.length][1];
for (int i = 0; i < regionNum.length; i++) {
by[i] = regionNum[i].getBytes();
}
admin.createTable(td,by);
admin.close();
}
public static void createMoreColumnFamilyTable(String tableName,int columnFamilyVersion,int columnFamilyDataTimeLive,String... columnFamilyName) throws Exception {
Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());
TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
List<ColumnFamilyDescriptor> list = new ArrayList<>();
for (int i = 0; i < columnFamilyName.length; i++) {
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName[i].getBytes());
cfdb.setMaxVersions(columnFamilyVersion);
cfdb.setTimeToLive((columnFamilyDataTimeLive));
list.add(cfdb.build());
}
tdb.setColumnFamilies(list);
TableDescriptor td = tdb.build();
admin.createTable(td);
admin.close();
}
public static void createOneColumnFamilyTable(String tableName,String columnFamilyName,int columnFamilyVersions,int columnFamilyDataliveTime) throws Exception {
Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());
TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName.getBytes()));
ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());
cfdb.setTimeToLive(columnFamilyDataliveTime);
cfdb.setMaxVersions(columnFamilyVersions);
ColumnFamilyDescriptor cfd = cfdb.build();
tdb.setColumnFamily(cfd);
TableDescriptor td = tdb.build();
admin.createTable(td);
admin.close();
}
public static void deleteData(String tableName,String rowKey,String family,String column) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
Delete delete = new Delete(rowKey.getBytes());
delete.addColumn(family.getBytes(),column.getBytes());
tb.delete(delete);
tb.close();
}
public static void deleteFamily(String tableName,String rowKey,String family) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
Delete delete = new Delete(rowKey.getBytes());
delete.addFamily(family.getBytes());
tb.delete(delete);
tb.close();
}
public static void deleteRow(String tableName,String rowKey) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
Delete delete = new Delete(rowKey.getBytes());
tb.delete(delete);
tb.close();
}
public static void scanData(String tableName,String startRowKey,String endRowKey) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
Scan scan = new Scan();
scan.withStartRow(startRowKey.getBytes());
scan.withStopRow(endRowKey.getBytes());
ResultScanner scanner = tb.getScanner(scan);
Iterator<Result> it = scanner.iterator();
while(it.hasNext()){
Result result = it.next();
HBaseUtil.showData(result);
}
tb.close();
}
public static void getRowDatas(String tableName,String... rowKey) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
List<Get> list = new ArrayList<>();
for (int i = 0; i < rowKey.length; i++) {
Get get = new Get(rowKey[i].getBytes());
list.add(get);
}
Result[] results = tb.get(list);
for (Result result:results) {
HBaseUtil.showData(result);
System.out.println(result);
}
tb.close();
}
public static void putData(String tableName,String rowKey,String columnFamily,String column,String value) throws Exception {
Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);
Put put = new Put(rowKey.getBytes());
put.addColumn(columnFamily.getBytes(),column.getBytes(),value.getBytes());
tb.put(put);
tb.close();
}
}