hbase2.1.x 压缩算法

马育民老师 · · 320 次点击 · · 开始浏览    

说明

作用

减少数据体积,可以存储更多的数据

缺点

压缩/解压缩需要 大量计算,消耗大量CPU资源

解压缩过程

压缩

在写入数据块到 HDFS 之前会首先对数据块进行 压缩,再落盘,从而可以减少磁盘空间使用量

解压缩

在读数据的时候首先从 HDFS 中加载出 block 块之后进行 解压缩

压缩算法

hbase2.1 支持 LZO ZSTD GZ LZ4 算法

GZ(GZIP)

GZIP 压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢

用于冷数据存储,要求数据访问不频繁

默认支持

LZO

LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多

用于热数据存储,数据访问频繁时使用

zstd

zstd是Facebook在2016年开源的新无损压缩算法,优点是 压缩率压缩/解压缩 性能都很突出。

Linux内核、HTTP协议、以及一系列的大数据工具(包括Hadoop 3.0.0,HBase 2.0.0,Spark 2.3.0,Kafka 2.1.0)等都已经加入了对zstd的支持。

lz4

表存储量较小,但 qps 大,对 rt 要求极高。针对这种场景,可使用 lz4 压缩,其解压速度在部分场景下可以达到 lzo 的两倍以上。一旦读操作落盘需要解压缩,lz4 解压的rt和cpu开销都明显小于lzo压缩

默认支持

Snappy

Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些

用于热数据存储,数据访问频繁时使用

需要 hadoop 支持 Snappy 压缩,需要重新编译 hadoop

hbase 1.x 算法比较

是Google几年前发布的一组测试数据,来自《HBase: The Definitive Guide》

算法 压缩比 压缩速度 解压速度
GZIP 13.4% 21 MB/s 118 MB/s
LZO 20.5% 135 MB/s 410 MB/s
Zippy/Snappy 22.2% 172 MB/s 409 MB/s

压缩率

算法选择

Snappy的 压缩率最低,但是编解码 速率最高,对 CPU的消耗也最小,目前一般建议使用Snappy

使用 Snappy,需要 重新编译 hadoop,让hadoop 支持 Snappy 压缩

详见:hadoop3.x编译源码(centos7平台,支持snappy)

阿里提供的算法比较

https://help.aliyun.com/document_detail/59373.html

不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景:

阿里建议在:

  • 对rt要求极高,建议使用 lz4 压缩算法,lz4解压缩速度最快

  • 对rt要求不高,特别是 监控、物联网等场景,建议使用 zstd 压缩算法,zstd压缩率最大

rt 解释: Response-time,响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。

本文来自:马育民老师

感谢作者:马育民老师

查看原文:hbase2.1.x 压缩算法

320 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传