HBase開啓Snappy壓縮

背景

HBase是目前主流的Nosql數據庫之一,由於其優秀的水平擴展能力,業界常將其用來存儲海量級的數據。在我們使用HBase的時候,爲了節省服務器的存儲成本,建議開啓HBase的數據壓縮特性。主流的HBase壓縮方式有LZO和Snappy,Snappy的壓縮比會稍微優於LZO。需要注意的是,Snappy是需要單獨下載並編譯安裝的,此過程不在本文討論範文之內,本文主要介紹如何通過HBase shell來開啓Snappy壓縮。

步驟

指定Snappy的場景有兩種:

  1. 創建時指定格式。
  2. 修改已經創建好的列族的壓縮格式。

創建

我們可以在一開始創建表的時候就指定Snappy壓縮格式:

hbase> create 'test', { NAME => 'c', COMPRESSION => 'SNAPPY' }
hbase> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'c', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP
_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}


修改

通過describe,我們可以看到test表的壓縮格式爲SNAPPY。

假設我們已經有了一張表,並且表裏也有了數據,我們照樣可以在表上添加Snappy壓縮格式。

我們以test表爲例

 

1.我們先創建一張不含任何壓縮格式的test表,並且向其導入10多G的數據:

我們可以看到,在未壓縮之前,test表的數據在hdfs上一共佔用了12.2G的磁盤空間

$ hadoop fs -du -h /hbase/data/default/
12.2 G /hbase/data/default/test

 

2.然後disable test表:

hbase> disable 'test'

 

3.修改壓縮格式:

需要注意的是,修改壓縮格式時,必須一個列族一個列族的改

hbase> alter 'test', NAME => 'c', COMPRESSION => 'snappy'

4.enable test表:

hbase> enable 'test'

5.enable之後,還需要做一次大合併才能讓壓縮格式生效:

需要注意的是,千萬不要在表繁忙期間執行大合併操作

hbase> major_compact 'test'

6.describe test表看一下有沒有生效:

hbase> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'c', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP
_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

7.最後我們看一下,開啓了Snappy之後的壓縮比:

我們可以看到將近壓縮了33%,還是十分可觀的

$ hadoop fs -du -h /hbase/data/default/
8.1 G /hbase/data/default/test

 

總結

本文主要介紹瞭如何利用HBase shell在表上開啓Snappy壓縮。通過實踐表明,Snappy擁有較高的壓縮比。通過開啓Snappy壓縮,企業可以極大地節省磁盤存儲成本,尤其是當企業採用SSD存儲時,節省的成本將會更多。

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