1. 环境准备
新建项目后在pom.xml中添加依赖:
org.apache.hbase
hbase-server
1.3.1
org.apache.hbase
hbase-client
1.3.1
jdk.tools
jdk.tools
1.8
system
${JAVA_HOME}/lib/tools.jar
2. 获取Configuration对象和HbaseaAdmin
private static ThreadLocal adminTLocal = new ThreadLocal();
private static ThreadLocal connectTLocal = new ThreadLocal();
public static Connection getConnect() {
Configuration conf = HbaseConfiguration.create();
try {
Connection connect = ConnectionFactory.createConnection(conf);
//将connect放入connectTLocal
connectTLocal.set(connect);
System.out.println("链接"+connect);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connectTLocal.get();
}
public static Admin getAdmin() {
Admin admin = null;
getConnect();
try {
admin = connectTLocal.get().getAdmin();
System.out.println("Admin"+admin);
//将admin放入AdminTlocal
adminTLocal.set(admin);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return adminTLocal.get();
}
3. 判断表是否存在
public static boolean isTableExits(String tableName) throws Exception {
boolean result = adminTLocal.get().tableExists(TableName.valueOf(tableName));
return result;
}
4. 创建表
public static void createTable(String tableName , String columnFamily ,String... columnFamilys) throws Exception {
HTableDescriptor hTableDes = new HTableDescriptor(TableName.valueOf(tableName));
HColumnDescriptor hColumnDes = new HColumnDescriptor(columnFamily);
hTableDes.addFamily(hColumnDes);
for (String singleColumnFamily : columnFamilys) {
HColumnDescriptor singleHColumnDes = new HColumnDescriptor(singleColumnFamily);
hTableDes.addFamily(singleHColumnDes);
}
adminTLocal.get().createTable(hTableDes);
System.out.println("表"+tableName+"创建成功");
}
5. 添加/修改一条数据
public static void putDate(String tableName , String rowkey , String columnFamily , String column , String value) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Put put = new Put(Bytes.toBytes(rowkey));
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
table.put(put);
}
6. 删除一条数据的一个版本
public static void deleteData(String tableName , String rowkey , String columnFamily , String column) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Delete delete = new Delete(Bytes.toBytes(rowkey));
delete.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));
table.delete(delete);
}
7. 删除一条数据的列族
public static void deleteDatas(String tableName , String rowkey , String columnFamily , String column) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Delete delete = new Delete(Bytes.toBytes(rowkey));
table.delete(delete);
delete.addColumns(Bytes.toBytes(columnFamily), Bytes.toBytes(column));
}
8. 删除一个rowkey
public static void deleteDatas(String tableName , String rowkey ) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Delete delete = new Delete(Bytes.toBytes(rowkey));
table.delete(delete);
}
9. 删除表
public static void deleteTable(String tableName) throws IOException {
disableTable(tableName);
Admin admin = adminTLocal.get();
admin.disableTable(TableName.valueOf(tableName));
admin.deleteTable(TableName.valueOf(tableName));
}
10. 停止表
public static void disableTable(String tableName) throws IOException {
Admin admin = adminTLocal.get();
admin.disableTable(TableName.valueOf(tableName));
}
11. 清空表
public static void turnCat(String tableName , boolean preserved ) throws IOException {
Admin admin = adminTLocal.get();
admin.disableTable(TableName.valueOf(tableName));
admin.truncateTable(TableName.valueOf(tableName), preserved);
}
12. 扫描全表
public static void scanTable(String tableName) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
String family = Bytes.toString(CellUtil.cloneFamily(cell));
String column = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.clonevalue(cell));
System.out.print("rowkey:"+rowkey);
System.out.print(",family:"+family);
System.out.print(",column:"+column);
System.out.print(",value:"+value);
System.out.println();
}
}
}
13. 查询一条表数据
public static void getRowData(String tableName , String rowkey) throws IOException {
Table table = getConnect().getTable(TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowkey));
Result result = table.get(get);
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
String family = Bytes.toString(CellUtil.cloneFamily(cell));
String column = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.clonevalue(cell));
System.out.print("rowkey:"+rowkey);
System.out.print(",family:"+family);
System.out.print(",column:"+column);
System.out.print(",value:"+value);
System.out.println();
}
}
14. 创建命名空间
public static boolean createNamespace(String namespace) {
//判断命名空间是否存在
if(!(hasNamespace(namespace))) {
NamespaceDescriptor namespaceDes = NamespaceDescriptor.create(namespace).build();
try {
adminTLocal.get().createNamespace(namespaceDes);
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
System.out.println("命名空间在家里"+namespace+"以存在");
return false;
}
15. 删除命名空间
public static void deleteNamespace(String namespace) throws IOException {
getAdmin().deleteNamespace(namespace);
System.out.println("删除成功");
}
16. 判断命名空间是否存在
public static boolean hasNamespace(String namespace) {
try {
adminTLocal.get().getNamespaceDescriptor(namespace);
System.out.println("命名空间在"+namespace+"存在");
return true;
} catch (NamespaceNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("命名空间"+namespace+"不存在");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
17. 关闭资源
public static void close() {
if(getAdmin()!=null){
try {
adminTLocal.get().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
adminTLocal.remove();
connectTLocal.remove();
}
}