package com.embracesource.edh.hbase.table.create; import java.io.IOException; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class OperateTableUtil { //private static ResultHTMLGenerater resultHTMLGenerater = new ResultHTMLGenerater(); //创建表是通过HBaseAdmin对象来操作的。HBaseAdmin负责表的META信息处理 private static HBaseAdmin admin = null; static{ try { admin = new HBaseAdmin(Configure.getHBaseConfig()); } catch (MasterNotRunningException e) { e.printStackTrace(); } catch (ZooKeeperConnectionException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** *@description 创建表,如果存在则先删除此表 *@param tableName 表名 */ public static void createTable(String tableName) { boolean result = false; try { //删除表 removeTable(tableName); admin.createTable(genHTableDescriptor(tableName)); result = admin.tableExists(tableName); } catch (IOException e) { e.printStackTrace(); } finally { System.out.println(tableName + "是否创建成功:" + result); } } /** *@description 根据表名删除一张表 *@param tableName 表名 * @throws IOException */ public static void removeTable(String tableName) throws IOException { //判断是否存在此张表 boolean exists = admin.tableExists(tableName); if(exists){ //先使此张表离线 admin.disableTable(tableName); //删除表 admin.deleteTable(tableName); System.out.println("删除了已经存在的原表:" + tableName); } } /** *@description 根据表名创建表描述对象,同时设置列族的属性 */ public static HTableDescriptor genHTableDescriptor(String tableName) { //HTableDescriptor 代表的是表的schema HTableDescriptor ht = new HTableDescriptor(tableName); //HColumnDescriptor 代表的是column的schema HColumnDescriptor desc = new HColumnDescriptor(Configure.FAMILY_NAME); Configure.configColumnFamily(desc); ht.addFamily(desc); return ht; } public static void createTableWithSplitKeys(String tableName) { boolean result = false; try { removeTable(tableName); /** * @description Creates a new table with an initial set of empty regions defined by the specified split keys. * The total number of regions created will be the number of split keys plus one. * Synchronous operation. Note : Avoid passing empty split key. * @param desc - table descriptor for table * @param splitKeys - array of split keys for the initial regions of the table */ admin.createTable(genHTableDescriptor(tableName), genSplitKeys()); result = admin.tableExists(tableName); } catch (IOException e) { e.printStackTrace(); } finally { System.out.println("createTableWithSplitKeys(String tableName):---" +result ); } } public static byte[][] genSplitKeys() { return new byte[0][]; } }