hbase(main):020:0> describe 'SVNCHECKOUTTBL_UPT'
DESCRIPTION ENABLED
'SVNCHECKOUTTBL_UPT', {NAME => 'I', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW false
', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '
0', TTL => '2147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMOR
Y => 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.0410 seconds
hbase(main):022:0> alter 'SVNCHECKOUTTBL_UPT',NAME=>'I',TTL=>'864000'
Updating all regions with the new schema...
60/60 regions updated.
Done.
0 row(s) in 1.2570 seconds
hbase(main):023:0> enable 'SVNCHECKOUTTBL_UPT'
0 row(s) in 4.5620 seconds
hbase(main):024:0>
hbase(main):026:0> major_compact('SVNCHECKOUTTBL_UPT')
0 row(s) in 0.1920 seconds
上面是基本的操作,如果你的表已经很满,满到几乎快把hadoop撑爆的时候,上面的方法是慢慢删除的方法,下面是具体的解释:
ttl是hbase中表数据的过期时间,一个列族可以对应一个ttl值
habse中数据删除不是立刻执行的,类似软删除,当你标识数据为删除状态之后,hbase会在大版本合并的时候去真正的处理hadoop上的文件,进而释放磁盘空间,
另外注意一点,在修改表的ttl值的时候,一般需要先disable 'table'
还有一剂猛药,就是直接disable 'table' 然后drop 'table'
版本库合并会在后台执行,占用比较多的内存和cup资源,一般在系统负载较低的情况下执行,可以直接写一个脚本,挂crontab执行:
example:
#!/bin/sh
exec /usr/local/code_hbase/hbase/bin/hbase shell <<EOF
major_compact('TABLE')
EOF