package com.cloudera.sa.hbase.to.hdfs; import java.io.IOException; import org.apache.commons.lang.StringUtils; 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 org.apache.hadoop.hbase.io.hfile.Compression; import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.StoreFile.BloomType; import org.apache.hadoop.hbase.util.Bytes; public class CreateTable { public static void main(String[] args) throws Exception{ if (args.length == 0) { System.out.println("CreateTables {tableName} {columnFamilyName} {RegionCount}"); return; } String tableName = args[0]; String columnFamilyName = args[1]; String regionCount = args[2]; long regionMaxSize = 107374182400l; Configuration config = HBaseConfiguration.addHbaseResources(new Configuration()); HBaseAdmin admin = new HBaseAdmin(config); createTable(tableName, columnFamilyName, Short.parseShort(regionCount), regionMaxSize, admin); admin.close(); System.out.println("Done"); } private static void createTable(String tableName, String columnFamilyName, short regionCount, long regionMaxSize, HBaseAdmin admin) throws IOException { System.out.println("Creating Table: " + tableName); HTableDescriptor tableDescriptor = new HTableDescriptor(); tableDescriptor.setName(Bytes.toBytes(tableName)); HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamilyName); columnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY); columnDescriptor.setBlocksize(64 * 1024); columnDescriptor.setBloomFilterType(BloomType.ROW); tableDescriptor.addFamily(columnDescriptor); tableDescriptor.setMaxFileSize(regionMaxSize); tableDescriptor.setValue(tableDescriptor.SPLIT_POLICY, ConstantSizeRegionSplitPolicy.class.getName()); tableDescriptor.setDeferredLogFlush(true); regionCount = (short)Math.abs(regionCount); int regionRange = Short.MAX_VALUE/regionCount; int counter = 0; byte[][] splitKeys = new byte[regionCount][]; for (int i = 0 ; i < splitKeys.length; i++) { counter = counter + regionRange; String key = StringUtils.leftPad(Integer.toString(counter), 5, '0'); splitKeys[i] = Bytes.toBytes(key); System.out.println(" - Split: " + i + " '" + key + "'"); } admin.createTable(tableDescriptor, splitKeys); } }