package com.chris.hbase; 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; public class hbaseAPI { private static Admin admin = null; private static Connection connection= null; // 当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化 static { try { // 1.获取配置信息 Configuration conf = HbaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104"); // 2.创建连接对象 connection = ConnectionFactory.createConnection(conf); // 3.创建Admin对象 admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } //关闭资源 public static void close(){ if(admin!=null){ try { admin.close(); } catch (IOException e) { e.printStackTrace(); } } if(connection!=null){ try { connection.close(); } catch (IOException e) { e.printStackTrace(); } } } // 判断表是否存在 public static boolean isTableExist(String tableName) throws IOException { boolean ans = admin.tableExists(TableName.valueOf(tableName)); return ans; } // 创建表 public static void createTable(String tableName,String... columnFamilies) throws IOException { // 1.判断是否存在列族信息 if(columnFamilies.length<=0){ System.out.println("请设置列族信息!"); return; } // 2.判断表是否存在 if(isTableExist(tableName)){ System.out.println(tableName+"表已存在!"); } // 3.创建表描述器 HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName)); // 4.循环添加列族信息 for (String cfs : columnFamilies) { // 5.创建列族描述器 HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cfs); // 6.添加具体的列族信息 hTableDescriptor.addFamily(hColumnDescriptor); } // 7.创建表 admin.createTable(hTableDescriptor); } // 创建命名空间 public static void createNameSpace(String name){ NamespaceDescriptor descriptor = NamespaceDescriptor.create(name).build(); try { admin.createNamespace(descriptor); System.out.println("----"+name+"命名空间创建成功!"); } catch (NamespaceExistException e){ System.out.println("该命名空间已存在!"); } catch (IOException e) { e.printStackTrace(); } } // 删除表 public static void deleteTable(String tableName) throws IOException { // 1.判断表是否存在 if(!isTableExist(tableName)){ System.out.println(tableName+"--该表不存在!"); } TableName name = TableName.valueOf(tableName); // 2. 先disable表 admin.disableTable(name); // 3.再删除表 admin.deleteTable(name); System.out.println("----该表删除成功!"); } // 插入数据 // cf : 列族 cn:列 public static void putData(String tableName,String rowKey,String cf,String cn,String value) throws IOException { // 1.获取表对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 2.创建put对象 Put put = new Put(Bytes.toBytes(rowKey)); // 3.添加 列族、列、值 (批量添加数据:1、批量添加列 2、批量添加rowKey) put.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn),Bytes.toBytes(value)); // 4.插入数据 table.put(put); System.out.println("-----数据插入成功!"); // 关闭资源 table.close(); } // 获取数据 (get) public static void getData(String tableName, String rowKey, String cf, String cn) throws IOException { // 1.获取表对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 2.创建get对象 Get get = new Get(Bytes.toBytes(rowKey)); // 2.1 指定获取的列族 // get.addFamily(Bytes.toBytes(cf)); // 2.2 指定列族和列 get.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn)); // 2.3 设置获取的版本数 get.setMaxVersions(2); // 3.获取数据 Result result = table.get(get); for (Cell cell : result.rawCells()) { // 4.打印数据 System.out.println("CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+ ",CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+ ",Value:"+Bytes.toString(CellUtil.clonevalue(cell))); } // 5.关闭表连接 table.close(); } // 获取数据 (scan) public static void scan(String tableName) throws IOException { Table table = connection.getTable(TableName.valueOf(tableName)); Scan scan = new Scan(Bytes.toBytes("1001"),Bytes.toBytes("1002")); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { for (Cell cell : result.rawCells()) { // 4.打印数据 System.out.println("RowKey:"+Bytes.toString(CellUtil.cloneRow(cell))+ ",CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+ ",CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+ ",Value:"+Bytes.toString(CellUtil.clonevalue(cell))); } } table.close(); } // 删除数据(delete) public static void deleteData(String tableName,String rowKey,String cf,String cn) throws IOException { // 1.创建表对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 2.创建delete对象 Delete delete = new Delete(Bytes.toBytes(rowKey)); // 2.1 指定删除的列 (type=DeleteColumn ,删除所有版本) // delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cn)); // 2.2 指定删除的列 (type=Delete ,删除当前版本,再次查询会发现历史版本) delete.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn)); // 3.执行删除操作 (只提供tableName和rowKey,会删除整个列族,type=DeleteFamily ) table.delete(delete); System.out.println("----删除成功!"); // 4.关闭连接 table.close(); } public static void main(String[] args) throws IOException { // 1.判断表是否存在 boolean exist = isTableExist("stu"); System.out.println("stu是否存在?"+exist); // 2.创建表 System.out.println(isTableExist("stu2")); createTable("stu2","info"); System.out.println(isTableExist("stu2")); // 3.删除表 deleteTable("stu1"); // 4.创建命名空间 createNameSpace("2022"); // 5.向表中插入数据 putData("stu","1001","info","name","Booker"); putData("stu","1002","info","name","Ayton"); // 6.获得表数据 (get) getData("stu","1004","info", "name"); // 7.获取表数据 (scan) scan("stu"); // 8.删除数据 deleteData("stu1","1001","info1","name"); close(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)