天天看點

hbase開啟lzo壓縮

hbase隻支援對gzip的壓縮,對lzo壓縮支援不好。在io成為系統瓶頸的情況下,一般開啟lzo壓縮會提高系統的吞吐量。但這需要參考具體的應用場景,即是否值得進行壓縮、壓縮率是否足夠等等。

想要hbase支援lzo壓縮,參照以下步驟:

1 首先要讓系統支援lzo動态庫,安裝lzo-2.00以上版本:[url]http://www.oberhumer.com/opensource/lzo/download/[/url]

2 預設安裝完後應該在系統的/usr/local/lib/找到liblzo*等幾個so

3 到[url]http://code.google.com/p/hadoop-gpl-compression/[/url]下載下傳lzo相關的native庫

4 拷貝3中下載下傳的 hadoop-gpl-compression-0.1.0-dev.jar 或 hadoop-gpl-compression-0.1.0.jar 到 hbase/lib以及hadoop/lib 中

5 拷貝3中下載下傳的 lib/native/* 到 hadoop/lib/native 及 hbase/lib/native

6 確定以上4/5中的檔案同步到了每台regionserver上

7 在core-site.xml中加上:

<property>
<name>io.compression.codecs</name>
<value>com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
           

8 重新開機dfs及hbase,建表時使用:

create 'mytable', {NAME=>'colfam:', COMPRESSION=>'lzo'}
           

此時這個column即為lzo了,往它讀寫資料會自動進行lzo壓縮和解壓縮。

P.S:

1 如果不清楚你的hbase是否配置好了支援lzo,可以執行以下指令檢查之,如果不支援的話這個指令會提示你還缺什麼檔案:

hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://namenode:9000/test_path lzo
           

2 如果你和我一樣使用了CDH3版本的hdfs,那麼該版本的hdfs與hadoop-gpl-compression會有沖突,原因是CDH3修改了compression.java,增加了reinit()接口。

此時需要重新編譯hadoop-gpl-compression工程,修改 src/java/com/hadoop/compression/lzo/LzoCompressor.java,增加以下行:

public void reinit(Configuration conf) {
    // do nothing
  }
           

然後重新編譯工程,将生成的jar包替換以上第4步中的那個jar包