一、要點
有關Snappy的相關介紹可參看Hadoop壓縮-SNAPPY算法,如果想安裝Snappy,可以參看Hadoop HBase 配置 安裝 Snappy 終極教程。
1. HBase修改Table壓縮格式步驟
2. 實測結果分享
二、HBase修改Table壓縮格式步驟
修改HBase壓縮算法很簡單,只需要如下幾步:
1. hbase shell命令下,disable相關表:
|
1
|
disable
'test'
|
實際產品環境中,’test’表可能很大,例如上幾十T的數據,disable過程會比較緩慢,需要等待較長時間。disable過程可以通過查看hbase master log日志監控。
2. 修改表的壓縮格式
|
1
|
alter
'test'
, NAME =>
'f'
, COMPRESSION =>
'snappy'
|
NAME即column family,列族。HBase修改壓縮格式,需要一個列族一個列族的修改。而且這個地方要小心,別將列族名字寫錯,或者大小寫錯誤。因為這個地方任何錯誤,都會創建一個新的列族,且壓縮格式為snappy。當然,假如你還是不小心創建了一個新列族的話,可以通過以下方式刪除:
|
1
|
alter
'test'
, {NAME=>
'f'
, METHOD=>
'delete'
}
|
同樣提醒,別刪錯列族,否則麻煩又大了~
3. 重新enable表
|
1
|
enable
'test'
|
4. enable表后,HBase表的壓縮格式並沒有生效,還需要一個動作,即HBase major_compact
|
1
|
major_compact
'test'
|
該動作耗時較長,會對服務有很大影響,可以選擇在一個服務不忙的時間來做。
describe一下該表,可以看到HBase 表壓縮格式修改完畢。
二、 實測結果分享
1. 線上有一個稍微大些的表,壓測前的大小是
|
1
2
|
[xxxx]hadoop fs -
du
/hbase/tablename
37225209575949 hdfs:
//xxxx
:9000
/hbase/tablename
|
也即33.85613088171249T
2. 等最終major_compact完畢后,數據大小為
[xxxx]hadoop fs -du /hbase/tablename 14910587650937 hdfs://xxxx:9000/hbase/tablename
即剩余13.56110046884805T,壓縮掉20.29503041286444T
3. 實測情況下,remaining為:
13.56110046884805/33.85613088171249 = 40.055%
跟網上流傳的最好效果22.2%還是有一定差距的。但是Google Snappy官網上也說,為達到更高的壓縮速度,Snappy允許損失一些壓縮率。
有一點需要說明,因為是線上服務,所以在修改壓縮格式后,至comact結束,中間有入庫操作,大概有一周到兩周的數據入庫。也就是說,實際值要比40.055%小一些,但是應該影響不太大。
