讀者來信 | 設置HBase TTL必須先disable表嗎?(已解決)

今日有朋友加好友與我探討一些問題,我以爲這些問題倒挺有價值的;因而就想在本公衆號開設一個問答專欄,方便技術交流與分享,專欄名就定爲:《讀者來信》。如遇到本人能力有限難以解決的問題,該貼將會被轉發至個人資源圈尋求大佬們出手幫助,並附上提問者微信二維碼。也歡迎你們在留言區積極探討解決方案~後端

來信人:黃*偉

小猿提問

若是我用Spark處理文件寫進HBase,文件按日期天天增量下發,若是隻想在HBase中保留最近90天的文件數據,有什麼好的方法嗎?TTL會有禁用表操做,後端查詢就會報錯。除了TTL,還有別的解決方案嗎?微信

小猿分析

該問題主要的癥結點在於:建表之初,沒有及時給列族設置TTL,入數據以後想到能夠設置表的TTL屬性來保證數據時效性但又不想禁用表。怎麼辦呢?測試

小猿解答

這裏,小猿給出兩條解決方案:code

方案一:資源

其實在稍微高一點的HBase版本,設置表TTL屬性已經能夠在線進行,不須要disable表了。若是不肯定,能夠先建一個測試表在線設置一下TTL試一試。若是支持,那能夠選擇在低峯期經過HBase Shell手動修改列族的時效性,一勞永逸。it

hbase(main):030:0> create 'test','f1'
0 row(s) in 1.2990 seconds

=> Hbase::Table - test
hbase(main):031:0> desc 'test'
Table test is ENABLED                                                                                                                                                                          
test                                                                                                                                                                                           
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                    
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS
 => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                                 
1 row(s) in 0.0480 seconds

hbase(main):032:0> alter 'test',{NAME => 'f1',TTL => '86400'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9870 seconds

單位:秒(s)io

方案二:test

若是方案1行不通,能夠嘗試經過API的方式,在插入數據時實時設置單條數據TTL。只不過歷史數據就要手動刪除了。date

Put put = new Put(Bytes.toBytes("row1"));
put.setTTL(86400L);

單位:秒(s)二維碼

知識點補充

若是想重置TTL爲'FOREVER'怎麼作?
答:HBase TTL 最大值爲INT最大值 2147483647,只需將TTL設爲該整數便可。

hbase(main):033:0> alter 'test',{NAME => 'f1',TTL => '2147483647'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9170 seconds

hbase(main):034:0> desc 'test'
Table test is ENABLED                                                                                                                                                                          
test                                                                                                                                                                                           
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                    
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS
 => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                                 
1 row(s) in 0.0140 seconds

若是您有更好的答案,歡迎留言區留言哦~

掃描二維碼關注博主公衆號

轉載請註明出處!歡迎關注本人微信公衆號【HBase工做筆記】

相關文章
相關標籤/搜索