本文主要介紹HBase在資料壓縮與編碼中的實際應用。
壓縮演算法
目前阿里雲平台支援壓縮演算法有: LZO、ZSTD、GZ、LZ4、SNAPPY和NONE,其中NONE代表不開啟壓縮。不同壓縮演算法在不同情境的壓縮比,及解壓速度對比如下,都是來自線上真實情境。
業務類型 | 無壓縮表大小 | LZO(壓縮率/解壓速度MB/s) | ZSTD(壓縮率/解壓速度MB/s) | LZ4(壓縮率/解壓速度MB/s) |
監控類 | 419.75T | 5.82/372 | 13.09/256 | 5.19/463.8 |
日誌類 | 77.26T | 4.11/333 | 6.0/287 | 4.16/496.1 |
風控類 | 147.83T | 4.29/297.7 | 5.93/270 | 4.19/441.38 |
消費記錄 | 108.04T | 5.93/316.8 | 10.51/288.3 | 5.55/520.3 |
說明
對rt要求極高,建議使用lz4壓縮演算法。
對rt要求不高,特別是監控、物聯網等情境,建議使用zstd壓縮演算法。
編碼
HBase很早就支援了DataBlockEncoding,即通過減少HBase keyvalue中重複的部分來壓縮資料。我們推薦DATA_BLOCK_ENCODING使用diff。
操作步驟
修改表的屬性,此為壓縮編碼。
alter 'test', {NAME => 'f', COMPRESSION => 'lz4', DATA_BLOCK_ENCODING =>'DIFF'}
壓縮編碼並不會立即生效,需要major_compact,此會耗時較長,注意在業務低峰期進行。
major_compact 'test'
說明
壓縮編碼的參考文檔請參見阿里HBase資料壓縮編碼探索。