package siena.hbase; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.client.HBaseAdmin; import siena.ClassInfo; import siena.Model; import siena.SienaException; public class HBaseDdlGenerator { private List<Class<? extends Model>> classes = new ArrayList<Class<? extends Model>>(); public void addTable(Class<? extends Model> clazz) { classes.add(clazz); } public void updateSchema() throws IOException { Configuration config = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(config); HTableDescriptor[] descriptors = admin.listTables(); List<String> tables = new ArrayList<String>(); for (HTableDescriptor hTableDescriptor : descriptors) { tables.add(hTableDescriptor.getNameAsString()); } for (Class<?> clazz : classes) { ClassInfo info = ClassInfo.getClassInfo(clazz); String tableName = info.tableName; if(!tables.contains(tableName)) { // create table HTableDescriptor descriptor = createTable(tableName); admin.createTable(descriptor); } tables.remove(tableName); } for (String table : tables) { admin.disableTable(table); admin.deleteTable(table); } } private HTableDescriptor createTable(String tableName) { HTableDescriptor descriptor = new HTableDescriptor(tableName); HColumnDescriptor columnDescriptor = new HColumnDescriptor("string:"); descriptor.addFamily(columnDescriptor); return descriptor; } public void dropTables() { HBaseConfiguration config = new HBaseConfiguration(); try { HBaseAdmin admin = new HBaseAdmin(config); HTableDescriptor[] descriptors = admin.listTables(); for (HTableDescriptor hTableDescriptor : descriptors) { String name = hTableDescriptor.getNameAsString(); admin.disableTable(name); admin.deleteTable(name); } } catch(IOException e) { throw new SienaException(e); } } }