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.TableNotDisabledException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.util.Bytes; public class TestCreateTable { private static HBaseAdmin hba; public static void main(String[] args) { try { boolean isPartitionEnabled = false; hba = new HBaseAdmin(Configure.getHBaseConfig()); createTable("Test_Table"); createTableWithSplitKeys("Test_Table_SpilitKey"); createTableWithStartAndEndKey("Test_Table_StartKey_EndKey_Num"); // Async methods // Not finished now // createPartitionTableAsync("Test_Table_Async_Locator", new // SuffixClusterLocator()); // createPartitionTableAsyncWithSpiltKeys("Test_Table_Async_SplitKeys_Locator", // new SuffixClusterLocator()); try { tableExistFamily(hba, "Test_Table"); if (isPartitionEnabled == true) { tableExistFamily(hba, "Test_Table_Locator"); } } catch (IOException e) { e.printStackTrace(); } } catch (MasterNotRunningException e) { e.printStackTrace(); } catch (ZooKeeperConnectionException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (hba != null) { try { hba.close(); } catch (IOException e) { } } } } public static void tableExistFamily(HBaseAdmin hba, String tableName) throws IOException { String testColumn1 = "test1"; String testColumn2 = "test2"; boolean before = false; boolean after = false; before = existsFamilyName(hba, tableName, testColumn1); boolean getException = false; try { hba.addColumn(tableName, new HColumnDescriptor(testColumn1)); } catch (TableNotDisabledException e) { getException = true; } finally { } after = existsFamilyName(hba, tableName, testColumn1); getException = false; try { hba.deleteColumn(tableName, testColumn1); } catch (TableNotDisabledException e) { getException = true; } finally { } after = existsFamilyName(hba, tableName, testColumn1); hba.disableTable(tableName); before = existsFamilyName(hba, tableName, testColumn2); hba.addColumn(tableName, new HColumnDescriptor(testColumn2)); after = existsFamilyName(hba, tableName, testColumn2); System.out.println(before + " : " + after); before = after; hba.deleteColumn(tableName, testColumn2); after = existsFamilyName(hba, tableName, testColumn2); System.out.println(before + " : " + after); hba.enableTable(tableName); } public static boolean existsFamilyName(HBaseAdmin hba, String tableName, String columnName) { HTableDescriptor[] list; try { list = hba.listTables(); for (int i = 0; i < list.length; i++) { if (list[i].getNameAsString().equals(tableName)) for (HColumnDescriptor hc : list[i].getColumnFamilies()) { if (hc.getNameAsString().equals(columnName)) return true; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public static HTableDescriptor genHTableDescriptor(String tableName) { HTableDescriptor ht = new HTableDescriptor(tableName); HColumnDescriptor desc = new HColumnDescriptor(Configure.FAMILY_NAME); Configure.configColumnFamily(desc); ht.addFamily(desc); return ht; } public static byte[][] genSplitKeys() { return new byte[0][]; } private static void removeTable(String tableName) throws IOException { if (hba.tableExists(tableName)) { hba.disableTable(tableName); hba.deleteTable(tableName); } } public static void createTable(String tableName) { boolean result = false; try { removeTable(tableName); hba.createTable(genHTableDescriptor(tableName)); result = hba.tableExists(tableName); } catch (IOException e) { e.printStackTrace(); } finally { } } public static void createTableWithSplitKeys(String tableName) { boolean result = false; try { removeTable(tableName); hba.createTable(genHTableDescriptor(tableName), genSplitKeys()); result = hba.tableExists(tableName); } catch (IOException e) { e.printStackTrace(); } } public static void createTableWithStartAndEndKey(String tableName) { boolean result = false; try { removeTable(tableName); hba.createTable(genHTableDescriptor(tableName), Bytes.toBytes("123"), Bytes.toBytes("456"), 10); result = hba.tableExists(tableName); } catch (IOException e) { e.printStackTrace(); } } }