Hbase之API基本操作
API之框架
private static Admin admin = null; private static Connection connection = null; private static Configuration conf = null; static { // hbase的配置文件 conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.11.11"); conf.set("hbase.zookeeper.property.clientPort", "2181"); // 获取hbase的管理员 try { connection = ConnectionFactory.createConnection(conf); admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } // 进行核心代码编写 // 释放hbase的资源 private void close(Connection connection, Admin admin) { if (connection != null) { try { connection.close(); } catch (IOException e) { e.printStackTrace(); } } if (admin != null) { try { admin.close(); } catch (IOException e) { e.printStackTrace(); } } }
判断表是否存在
// 判断表是否存在 public static boolean tableExists(String tableName) throws IOException { // 执行操作 boolean tableExists = admin.tableExists(TableName.valueOf(tableName)); return tableExists; } public static void main(String[] args) throws IOException { // 查看表是否存在 System.out.println(tableExists("student")); }
创建表
// 创建表 public static void createTable(String tableName, String... cfs) throws IOException { if (tableExists(tableName)) { System.out.println(tableName + "已存在"); return; } // 表需要表描述器 HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName)); // 添加列族,列族可以有多个,so for{ } for (String cf : cfs) { // 列族需要列描述器 HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf); hColumnDescriptor.setMaxVersions(1);// 添加版本号 hTableDescriptor.addFamily(hColumnDescriptor); } //创建表 admin.createTable(hTableDescriptor); System.out.println(tableName + "创建成功!!!"); } public static void main(String[] args) throws IOException { /*// 创建表*/ createTable("student1", "info"); System.out.println(tableExists("student1")); }
删除表
// 删除表 public static void deleteTable(String tableName) throws IOException { if (tableExists(tableName)) { // 使得表下线(使表不可用) admin.disableTable(TableName.valueOf(tableName)); // 删除表 admin.deleteTable(TableName.valueOf(tableName)); System.out.println(tableName + "删除成功!!!"); } else System.out.println(tableName + "不存在!!!"); } public static void main(String[] args) throws IOException { /*// 删除表*/ deleteTable("student1"); System.out.println(tableExists("student1")); }
添加数据
// 增加数据//修改数据 public static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException { if (tableExists(tableName)) { // 获取table对象 Table table = connection.getTable(TableName.valueOf(tableName)); ArrayList<Put> list = new ArrayList<Put>(); Put put = null; for (int i = 0; i <= rowKey.length(); i++) { put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value)); list.add(put); if (i % 100 == 0) { // 开始执行添加数据操作 table.put(list); list.clear(); } } // 关闭table table.close(); } else System.out.println(tableName + "不存在!!!"); } public static void main(String[] args) throws IOException { /*// 添加数据*/ for (int i = 0; i <= 1000; i++) { putData("student", "100" + i, "info", "email", "tao" + i + "qq.com"); } }
删除数据
// 删除表 public static void delete(String tableName, String rowkey, String cf, String cn) throws IOException { if (tableExists(tableName)) { // 获取table对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 创建delete对象 Delete delete = new Delete(Bytes.toBytes(rowkey)); // 删除所有版本的数据,公司常用的 delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn)); /** * 如果是多个版本的数据,删除最新版本的数据,之前的版本会出来顶替值 * 在公司慎用 * 可以更细粒度是控制版本 timestamp */ // delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); // 开始执行删除操作 table.delete(delete); // 关闭table table.close(); } else System.out.println(tableName + "不存在!!!"); } public static void main(String[] args) throws IOException { /*// 删除数据*/ delete("student", "1001", "info", "name"); }
全表扫描
// 全表扫描 public static void scan(String tableName, String startRow) throws IOException { // 创建表对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 创建scan对象 可以设置多条件 eg:startRow,stopRow Scan scan = new Scan(); // scan.getStartRow(Bytes.toBytes(startRow)); // scan.getStopRow(); // 开始扫描数据 ResultScanner resultScanner = table.getScanner(scan); // 表有多个rowkey for (Result result : resultScanner) { Cell[] cells = result.rawCells(); // 每个rowkey有多个单元格数据 for (Cell cell : cells) { System.out.println("RK-->" + Bytes.toString(CellUtil.cloneRow(cell)) + ",CF-->" + Bytes.toString(CellUtil.cloneFamily(cell)) + ",CN-->" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ",VALUE-->" + Bytes.toString(CellUtil.cloneValue(cell))); } } } public static void main(String[] args) throws IOException { /*// 全表扫描数据*/ scan("student", "1002"); }
根据rowkey获取数据
// 获取指定数据 可以指定cf cn public static void getData(String tableName, String rowkey, String cf, String cn) throws IOException { // 获取表对象 Table table = connection.getTable(TableName.valueOf(tableName)); // 获取get对象 Get get = new Get(Bytes.toBytes(rowkey)); get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); get.addFamily(Bytes.toBytes(cf)); get.setMaxVersions();// 默认是1版本 // 执行查找数据操作 Result result = table.get(get); // 开始遍历操作 Cell[] cells = result.rawCells(); // 每个rowkey下都有很多数据 for (Cell cell : cells) { System.out.println("RK-->" + Bytes.toString(CellUtil.cloneRow(cell)) + ",CF-->" + Bytes.toString(CellUtil.cloneFamily(cell)) + ",CN-->" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ",VALUE-->" + Bytes.toString(CellUtil.cloneValue(cell))); } } public static void main(String[] args) throws IOException { // 根据rowkey获取数据 getData("student", "1002", "info", "name"); }
做自己的太阳,成为别人的光!