import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.*;
/**
* Copyright (c) 2019 bigdata ALL Rights Reserved
* Project: learning
* Package: PACKAGE_NAME
* Version: 1.0
*
* @author qingzhi.wu 2020/9/12 16:54
*/
public class HomeWork implements HBaseInterface {
private static final String ZK_CONNECT_STR = "cdh01:2181,cdh02:2181,cdh04:2181";
private static Configuration config;
private static Admin admin;
private static Connection connection;
static {
try {
config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", ZK_CONNECT_STR);
connection = ConnectionFactory.createConnection(config);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void getAllTables() throws Exception {
TableName[] tableNames = admin.listTableNames();
System.out.println(Arrays.toString(tableNames));
}
@Override
public void createTable(String tableName, String[] family) throws Exception {
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
List<ColumnFamilyDescriptor> list = new ArrayList<>();
for (String s : family) {
ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(s)).build();
list.add(columnFamilyDescriptor);
}
TableDescriptor tableDescriptor = tableDescriptorBuilder.setColumnFamilies(list).build();
createTable(tableDescriptor);
}
@Override
public void createTable(TableDescriptor tds) throws Exception {
admin.createTable(tds);
}
@Override
public void createTable(String tableName, TableDescriptor tds) throws Exception {
//无法实现
}
@Override
public void descTable(String tableName) throws Exception {
TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(tableName));
Set<byte[]> columnFamilyNames = descriptor.getColumnFamilyNames();
StringBuilder stringBuilder = new StringBuilder();
for (byte[] columnFamilyName : columnFamilyNames) {
String s = Bytes.toString(columnFamilyName);
stringBuilder.append(s+",");
}
System.out.println(stringBuilder.toString());
}
@Override
public boolean existTable(String tableName) throws Exception {
return admin.tableExists(TableName.valueOf(tableName));
}
@Override
public void disableTable(String tableName) throws Exception {
admin.disableTable(TableName.valueOf(tableName));
}
@Override
public void dropTable(String tableName) throws Exception {
disableTable(tableName);
admin.deleteTable(TableName.valueOf(tableName));
}
@Override
public void modifyTable(String tableName) throws Exception {
// 修改表(增加和删除)
if (existTable(tableName)){
dropTable(tableName);
}else{
String[] defultFamily = {"d"};
createTable(tableName,defultFamily);
}
}
@Override
public void modifyTable(String tableName, String[] addColumn, String[] removeColumn) throws Exception {
TableName tn =TableName.valueOf(tableName);
for (String s : addColumn) {
ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(s)).build();
admin.addColumnFamily(tn,columnFamilyDescriptor);
}
for (String s : removeColumn) {
admin.deleteColumnFamily(tn,Bytes.toBytes(s));
}
}
@Override
public void modifyTable(String tableName, ColumnFamilyDescriptor cfds) throws Exception {
String name = Bytes.toString(cfds.getName());
TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(tableName));
Set<byte[]> columnFamilyNames = descriptor.getColumnFamilyNames();
Set<String> colNames = new HashSet<>();
for (byte[] columnFamilyName : columnFamilyNames) {
String s = Bytes.toString(columnFamilyName);
colNames.add(s);
}
if (!colNames.contains(name)){
ColumnFamilyDescriptor col = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name)).build();
admin.addColumnFamily(TableName.valueOf(tableName),col);
}
}
@Override
public void addData(String tableName, String rowKey, String[] column, String[] value) throws Exception {
Put put = new Put(Bytes.toBytes(rowKey));
Table table = getTable(tableName);
ColumnFamilyDescriptor[] columnFamilies = table.getDescriptor().getColumnFamilies();
for (ColumnFamilyDescriptor columnFamily : columnFamilies) {
String familyName = columnFamily.getNameAsString();
if ("base".equals(familyName)){
for (int i = 0; i < column.length; i++) {
put.addColumn(Bytes.toBytes(familyName),
Bytes.toBytes(column[i]), Bytes.toBytes(value[i]));
}
}
}
table.put(put);
System.out.println("add data Success!");
}
private Table getTable(String tableName) throws Exception{
return connection.getTable(TableName.valueOf(tableName));
}
@Override
public void putData(String tableName, String rowKey, String familyName, String columnName, String value) throws Exception {
Put put = new Put(Bytes.toBytes(rowKey));
Table table = getTable(tableName);
put.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName),Bytes.toBytes(value));
table.put(put);
System.out.println("add one data Success!");
}
@Override
public void putData(String tableName, String rowKey, String familyName, String columnName, String value, long timestamp) throws Exception {
Put put = new Put(Bytes.toBytes(rowKey));
Table table = getTable(tableName);
put.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName),Bytes.toBytes(value));
put.setTimestamp(timestamp);
table.put(put);
System.out.println("add one data Success!");
}
private void print(Result result) throws Exception{
CellScanner cellScanner = result.cellScanner();
while (cellScanner.advance()){
Cell cell = cellScanner.current();
System.out.println("行键:"+Bytes.toString(CellUtil.copyRow(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)));
}
}
@Override
public void putData(Put put) throws Exception {
//无法实现
}
@Override
public void putData(List<Put> putList) throws Exception {
//无法实现
}
@Override
public Result getResult(String tableName, String rowKey) throws Exception {
Get get = new Get(rowKey.getBytes());
Table table = getTable(tableName);
Result result = table.get(get);
return result;
}
@Override
public Result getResult(String tableName, String rowKey, String familyName) throws Exception {
Get get = new Get(rowKey.getBytes());
Table table = getTable(tableName);
get.addFamily(familyName.getBytes());
Result result = table.get(get);
return result;
}
@Override
public Result getResult(String tableName, String rowKey, String familyName, String columnName) throws Exception {
Get get = new Get(rowKey.getBytes());
Table table = getTable(tableName);
get.addColumn(familyName.getBytes(),columnName.getBytes());
Result result = table.get(get);
return result;
}
@Override
public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, int versions) throws Exception {
Get get = new Get(rowKey.getBytes());
Table table = getTable(tableName);
//get.addFamily(familyName.getBytes());
get.addColumn(familyName.getBytes(),columnName.getBytes());
get.setMaxVersions(versions);
//get.readVersions(versions);
Result result = table.get(get);
return result;
}
@Override
public ResultScanner getResultScann(String tableName) throws Exception {
Scan scan = new Scan();
Table table = getTable(tableName);
ResultScanner scanner = table.getScanner(scan);
return scanner;
}
@Override
public ResultScanner getResultScann(String tableName, Scan scan) throws Exception {
Table table = getTable(tableName);
ResultScanner scanner = table.getScanner(scan);
return scanner;
}
@Override
public ResultScanner getResultScann(String tableName, String columnFamily, String qualifier) throws Exception {
Scan scan = new Scan();
// scan.addFamily(columnFamily.getBytes());
scan.addColumn(columnFamily.getBytes(),qualifier.getBytes());
Table table = getTable(tableName);
ResultScanner scanner = table.getScanner(scan);
return scanner;
}
@Override
public void deleteColumn(String tableName, String rowKey) throws Exception {
Delete delete = new Delete(rowKey.getBytes());
Table table = getTable(tableName);
table.delete(delete);
}
@Override
public void deleteColumn(String tableName, String rowKey, String falilyName) throws Exception {
Table table = getTable(tableName);
Delete delete = new Delete(rowKey.getBytes());
table.delete(delete);
}
@Override
public void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws Exception {
Delete delete = new Delete(rowKey.getBytes());
delete.addColumn(falilyName.getBytes(),columnName.getBytes());
Table table = getTable(tableName);
table.delete(delete);
}
private static void close() {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
HomeWork homeWork = new HomeWork();
String tableName = "test2";
// String[] fams = {"d","m"};
//homeWork.createTable(tableName,fams);
// homeWork.getAllTables();
// TableDescriptor test3 = TableDescriptorBuilder.newBuilder(TableName.valueOf("test3")).build();
// homeWork.createTable(test3);
// homeWork.getAllTables();
//homeWork.modifyTable("test2");
// homeWork.getAllTables();
//homeWork.descTable("test1");
// String[] fams = {"d"};
// String[] ss = {"m"};
// ColumnFamilyDescriptor ss = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("ss")).build();
// homeWork.modifyTable("test2",ss);
// homeWork.descTable("test2");
// homeWork.putData("test2","1","m","age","22");
//homeWork.putData("test2","1","m","name","lisi");
//Result result = homeWork.getResult(tableName, "1");
// Result result = homeWork.getResult(tableName, "1","m","age");
homeWork.putData("test2","1","m","age","22");
homeWork.putData("test2","1","m","name","22");
homeWork.deleteColumn(tableName,"1","m","age");
Result result = homeWork.getResult(tableName, "1","m");
homeWork.print(result);
close();
}
}
(New API)HBase Java API的一些常规操作
最新推荐文章于 2021-12-25 16:16:25 发布