HBase change split policy on an existing table
hbase(main):006:0> create 'test_table_region', 'username' 0 row(s) in 1.2150 seconds hbase(main):009:0> put 'test_table_region', '1', 'username:nick' ,'3' 0 row(s) in 0.0050 seconds hbase(main):010:0> scan 'test_table_region' ROW COLUMN+CELL 1 column=username:nick, timestamp=1436859225880, value=3 1 row(s) in 0.1370 seconds hbase(main):011:0> describe 'test_table_region' DESCRIPTION ENABLED {NAME => 'test_table_region', FAMILIES => [{NAME => 'username', DATA_BLOCK_ENCODING true => 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRES SION => 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CELLS => 'fal se', BLOCKSIZE => '65536', IN_MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACH E => 'true'}]} 1 row(s) in 0.4040 seconds hbase(main):013:0> disable 'test_table_region' 0 row(s) in 3.1710 seconds hbase(main):001:0> alter 'test_table_region', {METHOD => 'table_att', SPLIT_POLICY => 'org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy', MAX_FILESIZE => '5000000000'} Updating all regions with the new schema... 1/1 regions updated. Done. 0 row(s) in 4.5130 seconds hbase(main):003:0> enable 'test_table_region' 0 row(s) in 6.0330 seconds hbase(main):046:0> describe 'test_table_region' DESCRIPTION ENABLED {NAME => 'test_table_region', SPLIT_POLICY => 'org.apache.hadoop.hbase.regionserver. true ConstantSizeRegionSplitPolicy', MAX_FILESIZE => '5000000000', FAMILIES => [{NAME => 'username', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 1 row(s) in 0.4610 seconds
the alter split_policy does not work for hbase before version 0.94
we need to use java code to change the split policy of an existing table
protected void changeSplitPolicy(String tableName, Configuration conf) throws IOException, IllegalAccessException, InstantiationException { HBaseAdmin admin = new HBaseAdmin(conf); HTable hTable = new HTable(conf, tableName); HTableDescriptor htd = hTable.getTableDescriptor(); HTableDescriptor tableDesc = new HTableDescriptor(htd); tableDesc.setValue(HTableDescriptor.SPLIT_POLICY, ConstantSizeRegionSplitPolicy.class.getName()); tableDesc.setValue(HTableDescriptor.MAX_FILESIZE, "5000000000"); if(admin.isTableEnabled(tableName)) { admin.disableTable(tableName); } admin.modifyTable(Bytes.toBytes(tableName), tableDesc); hTable.close(); admin.close(); System.out.println("change split policy over"); }
E-mail: huahuiyang@gmail.com
https://www.linkedin.com/in/huahuiyang/