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.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.NamespaceExistException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
/**
* * 一. DDL
* * 0. 判断表是否存在
* * 1. 创建表 Create
* * 2. 删除表 disable drop
* * 3. 创建命名空间 Create NameSpace
* * 二. DML
* * 1. 添加数据 put
* * 2. 查询(get)
* * 3. 查询(scan)
* * 4. 删除数据 delete
* @Author qiao
* @Date 2019/11/9 10:47
* @Version 1.0
*/
public class HbaseApiDemo {
// 声明管理员对象
private static Admin admin = null;
//声明连接
private static Connection connection = null;
//初始化
static {
try {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 关闭资源
*
* @throws IOException
*/
public static void close() throws IOException {
if (admin != null) {
admin.close();
}
if (connection != null) {
connection.close();
}
}
/**
* 判断表是否存在
*
* @param tableName
* @return
* @throws IOException
*/
public static boolean isTableExsit(String tableName) throws IOException {
boolean exists = admin.tableExists(TableName.valueOf(tableName));
return exists;
}
/**
* 创建表
*
* @param tableName
* @param factory
* @throws IOException
*/
public static void createTable(String tableName, String... factory) throws IOException {
if (isTableExsit(tableName)) {
System.out.println(tableName + "表已经存在");
return;
}
if (factory.length <= 0) {
System.out.println("参数异常");
return;
}
HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
for (String s : factory) {
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(s);
descriptor.addFamily(hColumnDescriptor);
}
admin.createTable(descriptor);
}
/**
* 删除表
* @param tableName
* @throws IOException
*/
public static void deleteTable(String tableName)throws IOException {
if (!isTableExsit(tableName)){
System.out.println(tableName + "表不存在");
return;
}
// 清空表
admin.disableTable(TableName.valueOf(tableName));
admin.deleteTable(TableName.valueOf(tableName));
}
/**
* 创建命名空间
* @param nameSpace
* @throws IOException
*/
public static void createNameSpace(String nameSpace)throws IOException{
try {
NamespaceDescriptor build = NamespaceDescriptor.create(nameSpace).build();
admin.createNamespace(build);
}catch (NamespaceExistException e){
System.out.println(nameSpace + "命名空间已存在");
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
* 添加数据
* @param tableName
* @param rk
* @param cloneFamily
* @param cn
* @param value
* @throws IOException
*/
public static void put(String tableName,String rk,String cloneFamily,String cn,String value)throws IOException {
// 创建表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 添加数据
Put putObject = new Put(Bytes.toBytes(rk));
putObject.addColumn(Bytes.toBytes(cloneFamily),Bytes.toBytes(cn),Bytes.toBytes(value));
table.put(putObject);
table.close();
}
/**
* Get查询
* @param tableName
* @param rk
* @throws IOException
*/
public static void get(String tableName,String rk)throws IOException{
// 创建表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建Get对象
Get getObject = new Get(Bytes.toBytes(rk));
//获取结果集
Result result = table.get(getObject);
// 循环d打印结果
for (Cell cell : result.rawCells()) {
System.out.println("RK:"+ Bytes.toString(CellUtil.cloneRow(cell))
+", cloneFamily:"+Bytes.toString(CellUtil.cloneFamily(cell))
+", CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))
+", Value :"+Bytes.toString(CellUtil.cloneValue(cell))
);
}
// 关闭资源
table.close();
}
public static void scan(String tableName)throws IOException{
// 创建表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建Scan对象
Scan scanObject = new Scan();
// 获取结果集
ResultScanner scanner = table.getScanner(scanObject);
// 循环打印
for (Result result : scanner) {
for (Cell cell : result.rawCells()) {
System.out.println("RK:"+ Bytes.toString(CellUtil.cloneRow(cell))
+", cloneFamily:"+Bytes.toString(CellUtil.cloneFamily(cell))
+", CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))
+", Value :"+Bytes.toString(CellUtil.cloneValue(cell))
);
}
}
// 关闭资源
table.close();
}
/**
* 测试方法
*
* @param args
*/
public static void main(String[] args) throws IOException {
// 判断表是否存在
// System.out.println(isTableExsit("student"));
// 创建表
// createTable("employee","info","data");
// deleteTable("employee");
// createNameSpace("1703D");
put("employee","1001","info","name","a1");
put("employee","1001","info","age","18");
put("employee","1002","info","name","a2");
put("employee","1003","info","name","a3");
// get("employee","1001");
scan("employee");
close();
}
}