1. 环境准备
新建项目后在pom.xml中添加依赖:
<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>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
2. 获取Configuration对象和HBaseaAdmin
private static ThreadLocal<Admin> adminTLocal = new ThreadLocal<Admin>();
private static ThreadLocal<Connection> connectTLocal = new ThreadLocal<Connection>();
/**
* 获取HbaseConnect
* 解耦Connect
*/
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();
}
/**
* 获取HBaseaAdmin
*/
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. 判断表是否存在
/**
* 判断表是否存在
* @param tableName
* @return
* @throws Exception
*/
public static boolean isTableExits(String tableName) throws Exception {
boolean result = adminTLocal.get().tableExists(TableName.valueOf(tableName));
return result;
}
4. 创建表
/**
* 创建表
* @param tableName 表名
* @param columnFamily 列族名
* @param columnFamilys 列族名(多个)
* @throws Exception
*/
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. 添加/修改一条数据
/**
* 添加/修改一条数据
* @param tableName 表名
* @param rowkey 行数
* @param columnFamily 列族
* @param column 列族名
* @param value 值
* @throws IOException
*/
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. 删除一条数据的一个版本
/**
* 删除一条数据的一个版本
* @param tableName 表名
* @param rowkey 行数
* @param columnFamily 列族
* @param column 列族名
* @throws IOException
*/
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. 删除一条数据的列族
/**
* 删除一条数据的列族
* @param tableName
* @param rowkey
* @param columnFamily
* @param column
* @throws IOException
*/
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
/**
* 删除一个rowkey
* @param tableName
* @param rowkey
* @throws IOException
*/
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. 删除表
/**
* 删除表
* @param tableName 表名
* @throws IOException
*/
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. 停止表
/**
* 停止表
* @param tableName
* @throws IOException
*/
public static void disableTable(String tableName) throws IOException {
Admin admin = adminTLocal.get();
admin.disableTable(TableName.valueOf(tableName));
}
11. 清空表
/**
* 清空表
* @param tableName
* @param preserved
* @throws IOException
*/
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. 扫描全表
/**
* 扫描全表
* @param tableName
* @throws IOException
*/
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. 查询一条表数据
/**
* 查询一条表数据
* @param tableName
* @param rowkey
* @throws IOException
*/
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. 创建命名空间
/**
* 创建命名空间
* @param namespace
* @return
*/
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. 删除命名空间
/**
* 删除命名空间
* @param namespace
* @throws IOException
*/
public static void deleteNamespace(String namespace) throws IOException {
getAdmin().deleteNamespace(namespace);
System.out.println("删除成功");
}
16. 判断命名空间是否存在
/**
* 判断命名空间是否存在
* @param namespace 命名空间名称
* @return
*/
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. 关闭资源
/**
* 关闭资源
* 注意尽量不要吧adminTlocal里的admin在定义变量赋值
*/
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();
}
}