修改HBase表的TTL

工作中需要修改已經使用表的TTL,遇到了一些問題,做下記錄


首先,進入hbase shell

1.disable表是必須的

disable 'table'
2.輸入alter 'table',shell彈出一堆提示
Here is some help for this command:
Alter column family schema;  pass table name and a dictionary
specifying new column family schema. Dictionaries are described
on the main help command output. Dictionary must include name
of column family to alter. For example,

To change or add the 'f1' column family in table 't1' from defaults
to instead keep a maximum of 5 cell VERSIONS, do:

  hbase> alter 't1', NAME => 'f1', VERSIONS => 5

To delete the 'f1' column family in table 't1', do:

  hbase> alter 't1', NAME => 'f1', METHOD => 'delete'

or a shorter version:

  hbase> alter 't1', 'delete' => 'f1'

You can also change table-scope attributes like MAX_FILESIZE
MEMSTORE_FLUSHSIZE, READONLY, and DEFERRED_LOG_FLUSH.

For example, to change the max size of a family to 128MB, do:

  hbase> alter 't1', METHOD => 'table_att', MAX_FILESIZE => '134217728'

You can add one table coprocessor by setting a table coprocessor attribute:

  hbase> alter 't1', METHOD => 'table_att',
    'coprocessor'=>'hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2'

Since you can have multiple coprocessors configured for a table, a
sequence number will be automatically appended to the attribute name
to uniquely identify it.

The coprocessor attribute must match the pattern below in order for
the framework to understand how to load the coprocessor classes:

  [coprocessor jar file location] | class name | [priority] | [arguments]

You can also remove a table-scope attribute:

  hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'

  hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'coprocessor$1'

There could be more than one alteration in one command:

  hbase> alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
3.首先按照提示中修改MAX_FILESIZE屬性的方法修改:

hbase(main):017:0> alter 'test_ttl', METHOD => 'table_att',MAX_FILESIZE => '5000'
Updating all regions with the new schema...
6/6 regions updated.
Done.
0 row(s) in 1.1980 seconds
好像好了,但是看了下HBase的Web界面上表的schema沒改,悲劇了。。。

靜下來仔細看了下schema:

{NAME => 'test_ttl', MAX_FILESIZE => '5000', FAMILIES => [{NAME => 'cf', MIN_VERSIONS => '0', TTL => '500'}]}

ttl是在cf的屬性中的,ttl應該是cf的屬性而不是table級別的屬性,因此嘗試修改cf屬性

4.修改cf的ttl屬性

hbase(main):018:0> alter 'test_ttl',NAME => 'cf', TTL => '500'
Updating all regions with the new schema...
6/6 regions updated.
Done.
0 row(s) in 1.3620 seconds
查看web,果然改了!

5.最後按照國際慣例,enable table

hbase(main):019:0> enable 'test_ttl'
0 row(s) in 2.0450 seconds

搞定



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章