HBase修改壓縮格式及Snappy壓縮實測分享
一、要點
有關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%小一些,但是應該影響不太大。