HBase開啟Snappy壓縮
阿新 • • 發佈:2019-02-07
原文連結:http://www.kissyu.org/2016/10/06/HBase%E5%BC%80%E5%90%AFSnappy%E5%8E%8B%E7%BC%A9/
背景
HBase是目前主流的Nosql資料庫之一,由於其優秀的水平擴充套件能力,業界常將其用來儲存海量級的資料。在我們使用HBase的時候,為了節省伺服器的儲存成本,建議開啟HBase的資料壓縮特性。主流的HBase壓縮方式有LZO和Snappy,Snappy的壓縮比會稍微優於LZO。需要注意的是,Snappy是需要單獨下載並編譯安裝的,此過程不在本文討論範文之內,本文主要介紹如何通過HBase shell來開啟Snappy壓縮。
步驟
指定Snappy的場景有兩種:
- 建立時指定格式。
- 修改已經建立好的列族的壓縮格式。
建立
我們可以在一開始建立表的時候就指定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表為例
-
我們先建立一張不含任何壓縮格式的test表,並且向其匯入10多G的資料:
12 $ hadoop fs -du -h /hbase/data/default/12.2 G /hbase/data/default/test 我們可以看到,在未壓縮之前,test表的資料在hdfs上一共佔用了12.2G的磁碟空間。
-
然後disable test表:
1 hbase> disable 'test' -
修改壓縮格式:
1 hbase> alter 'test', NAME => 'c', COMPRESSION => 'snappy' 需要注意的是,修改壓縮格式時,必須一個列族一個列族的改。
-
enable test表:
1 hbase> enable 'test' -
enable之後,還需要做一次大合併才能讓壓縮格式生效:
1 hbase> major_compact 'test' 需要注意的是,千萬不要在表繁忙期間執行大合併操作。
-
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'}
-
最後我們看一下,開啟了Snappy之後的壓縮比:
12 $ hadoop fs -du -h /hbase/data/default/8.1 G /hbase/data/default/test 我們可以看到將近壓縮了33%,還是十分可觀的。
總結
本文主要介紹瞭如何利用HBase shell在表上開啟Snappy壓縮。通過實踐表明,Snappy擁有較高的壓縮比。通過開啟Snappy壓縮,企業可以極大地節省磁碟儲存成本,尤其是當企業採用SSD儲存時,節省的成本將會更多。