看我72变,阿里HBase数据压缩编码探索

简介: 福利: 国际顶级盛会HBaseCon Asia 2018将于8月在北京举行,目前正免费开放申请中,更多详情参考https://yq.aliyun.com/promotion/631 如果你对大数据存储、分布式数据库、HBase等感兴趣,欢迎加入我们,一起做最好的大数据在线存储,职位参考及联系方式:https://maimai.

福利:

  • 国际顶级盛会HBaseCon Asia 2018将于8月在北京举行,目前正免费开放申请中,更多详情参考https://yq.aliyun.com/promotion/631
  • 如果你对大数据存储、分布式数据库、HBase等感兴趣,欢迎加入我们,一起做最好的大数据在线存储,职位参考及联系方式

前言

你可曾遇到这种需求,只有几百qps的冷数据缓存,却因为存储水位要浪费几十台服务器?你可曾遇到这种需求,几百G的表,必须纯cache命中,性能才能满足业务需求?你可曾遇到,几十M的小表,由于qps过高,必须不停的split,balance,利用多台服务器来抗热点?
面对繁杂的场景,Ali-HBase团队一直致力于为业务提供更多的选择和更低的成本。本文主要介绍了hbase目前两种提高压缩率的主要方法:压缩和DataBlockEncoding。

无损压缩:更小,更快,更省资源

通用压缩是数据库减少存储的重要手段,在hbase中也存在广泛应用。通常数据库都存在数据块的概念,针对每个块做压缩和解压。块越大,压缩率越高,scan throughput增加;块越小,latency越小。作为一种Tradeoff,线上hbase通常采用64K块大小,在cache中不做压缩,仅在落盘和读盘时做压缩和解压操作。

开源hbase通常使用的LZO压缩或者Snappy压缩。这两种压缩的共同特点是都追求较高的压缩解压速度,并实现合理的压缩率。然而,随着业务的快速增涨,越来越多的业务因为因为存储水位问题而扩容。hbase针对这一情况,采用了基于跨集群分区恢复技术的副本数优化、机型升级等优化手段,但依然无法满足存储量的快速膨胀,我们一直致力于寻找压缩更高的压缩方式。

新压缩(zstd、lz4)上线

Zstandard(缩写为Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像LZMA和ZPAQ那样追求尽可能高的压缩比,也不像LZ4那样追求极致的压缩速度。这种算法的压缩速度超过200MB/s, 解压速度超过400MB/s,基本可以满足目前hbase对吞吐量的需求。经验证,Zstd的数据压缩率相对于Lzo基本可以提高25%-30%,对于存储型业务,这就意味着三分之一到四分之一的的成本减少。

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

我们通过一张图片直观的展示各种压缩算法的性能:
ZSTD.png | center | 704x419
解压缩.png | center | 704x422

以线上几种典型数据场景为例,看看几种压缩的实际压缩率和单核解压速度(以下数据均来自于线上)

业务类型 无压缩表大小 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

目前,2017年双11,ZSTD已经在线上全面铺开,已累计优化存储超过2.5PB,预计全面推开后,节约存储空间超过15PB。LZ4也已经在部分读要求较高业务上线。
下图为某监控类应用zstd压缩算法后,集群整体存储量的下降情况。数据量由100+T减少到75T。

监控.png | center | 704x307

编码技术:针对结构化数据的即查即解压

hbase作为一种schema free的数据库,相当于传统的关系型数据库更加灵活,用户无需设计好表的结构,也可以在同一张表内写入不同schema的数据。然而,由于缺少数据结构的支持,hbase需要很多额外的数据结构来标注长度信息,且无法针对不同的数据类型采用不同的压缩方式。针对这一问题,hbase提出了编码功能,用来降低存储开销。由于编码对cpu开销较小,而效果较好,通常cache中也会开启编码功能。

旧DIFF Encoding介绍

hbase很早就支持了DataBlockEncoding,也就是是通过减少hbase keyvalue中重复的部分来压缩数据。 以线上最常见的DIFF算法为例,某kv压缩之后的结果:

  • 一个字节的flag(这个flag的作用后面解释)
  • 如果和上个KV的键长不一样,则写入1~5个字节的长度
  • 如果和上个KV的值长不一样,则写入1~5个字节的长度
  • 记录和上个KV键相同的前缀长度,1~5个字节
  • 非前缀部分的row key
  • 如果是第一条KV,写入列族名
  • 非前缀部分的的列名
  • 写入1~8字节的timestamp或者与上个KV的timestamp的差(是原值还是写与上个KV的差,取决于哪个字节更小)
  • 如果和上个KV的type不一样,则写入1字节的type(Put,Delete)
  • Value内容

那么在解压缩时,怎么判断和上个KV的键长是否一样,值长是否一样,写入的时间戳究竟是是原值还是差值呢?这些都是通过最早写入的1个字节的flag来实现的,
这个字节中的8位bit,含义是:

  • 第0位,如果为1,键长与上个kv相等
  • 第1位,如果为1,值长与上个kv相等
  • 第2位,如果为1,type与上个kv一样
  • 第3位,如果为1,则写入的timestamp是差值,否则为原值
  • 第456位,这3位组合起来的值(能表示0~7),表示写入的时间戳的长度
  • 第7位,如果为1,表示写入的timestamp差值为负数,取了绝对值。

小凡1 (2).png | center | 704x327
DIFF 编码之后,对某个文件的seek包含以下两步:

  1. 通过index key找到对应的datablock
  2. 从第一个完整KV开始,顺序查找,不断decode下一个kv,直到找到目标kv为止。

通过线上数据验证,DIFF encoding可以减少2-5倍的数据量。

新Indexable Delta Encoding上线

从性能角度考虑,hbase通常需要将Meta信息装载进block cache。如果将block大小较小,Meta信息较多,会出现Meta无法完全装入Cache的情况, 性能下降。如果block大小较大,DIFF Encoding顺序查询的性能会成为随机读的性能瓶颈。针对这一情况,我们开发了Indexable Delta Encoding,在block内部也可以通过索引进行快速查询,seek性能有了较大提高。Indexable Delta Encoding原理如图所示:
小凡2 (1).png | center | 704x320
在通过BlockIndex找到对应的数据块后,我们从数据块末尾找到每个完整KV的offset,并利用二分查找快速定位到符合查询条件的完整kv,再顺序decode每一个Diff kv,直到找到目标kv位置。

通过Indexable Delta EncodingHFile的随机seek性能相对于使用之前翻了一倍,以64K block为例,随机seek性能基本与不做encoding相近.在全cache命中的随机Get场景下,相对于Diff encoding rt下降50%,但存储开销仅仅提高3-5%。Indexable Delta Encoding目前已在线上多个场景应用,经受了双十一的考验。以风控集群为例,双集群双十一高峰期访问量接近,但已经上线Indexable Delta Encoding的集群在访问量稍多的情况下,平均读rt减少10%-15%。

gtj.png | center | 704x299


未开启集群

em14.png | center | 704x299


开启集群

未来

性能优化和用户体验,一直是阿里hbase的团队不懈的追求。我们一直在不断丰富自己的武器库,努力做最好的海量数据在线存储产品。欢迎对hbase实现,使用有任何问题的同学联系我们.

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
存储 缓存 算法
HBase优化之路-合理的使用编码压缩
为什么要讨论HBase编码压缩 编码+压缩能够成倍的减少数据的磁盘占用空间,节省可观的存储费用 编码+压缩通常情况下可以提高系统吞吐率,让系统可以做更多的功 默认建表不启用编码或者压缩,对初学者不友好 了解HBase编码 举个栗子,我们有一张物流表叫"express",记录物流订单的流转详情。
4308 0
|
搜索推荐 分布式数据库 Hbase
|
存储 数据采集 消息中间件
阿里HBase在用户画像领域的实践
互联网应用的一个特点是拥有海量的用户,这些海量的用户会产生海量的行为数据,有些产品还会需要去爬取更多的外部数据。基于海量数据的模型训练最终刻画出用户画像,基于用户画像自动的指导系统决策,在效率和准确度上给行业带来了质变。
6239 0
阿里HBase在用户画像领域的实践
|
存储 SQL 算法
​Lindorm/HBase增强版技术解密|每秒7亿次请求,阿里新一代数据库如何支撑?
Lindorm,就是云操作系统飞天中面向大数据存储处理的重要组成部分。Lindorm是基于HBase研发的、面向大数据领域的分布式NoSQL数据库,集大规模、高吞吐、快速灵活、实时混合能力于一身,面向海量数据场景提供世界领先的高性能、可跨域、多一致、多模型的混合存储处理能力。目前,Lindorm已经全面服务于阿里经济体中的大数据结构化、半结构化存储场景。
4125 2
​Lindorm/HBase增强版技术解密|每秒7亿次请求,阿里新一代数据库如何支撑?
|
运维 Kubernetes 分布式数据库
阿里HBase高可用8年“抗战”回忆录 | 11月5号栖夜读
今天的首篇文章,讲述了:2017年开始阿里HBase走向公有云,我们有计划的在逐步将阿里内部的高可用技术提供给外部客户,目前已经上线了同城主备,将作为我们后续高可用能力发展的一个基础平台。本文分四个部分回顾阿里HBase在高可用方面的发展:大集群、MTTF&MTTR、容灾、极致体验,希望能给大家带来一些共鸣和思考。
5254 0
|
Hbase 分布式数据库 监控
阿里HBase高可用8年“抗战”回忆录
2011年毕玄和竹庄两位大神将HBase引入阿里技术体系,2014年接力棒转到东8区第一位HBase commiter天梧手中,多年来与淘宝、旺旺、菜鸟、支付宝、高德、大文娱、阿里妈妈等几乎全BU合作伙伴携手共进,支撑了双十一大屏、支付宝账单、支付宝风控、物流详情等核心业务。2018年双十一,HBase全天处理请求2.4万亿行,单集群吞吐达到千万级别。从一个婴儿成长为青年,阿里HBase摔过很多次,甚至头破血流,我们在客户的信任之下幸运的成长,感激涕零。
3919 0
|
Kubernetes 关系型数据库 分布式数据库
阿里HBase高可用8年抗战回忆录 | 10月18号栖夜读
今天的首篇文章,讲述了 : 2019杭州云栖大会上,高德地图技术团队向与会者分享了包括视觉与机器智能、路线规划、场景化/精细化定位、时空数据应用、亿级流量架构演进等多个出行技术领域的热门话题。现场火爆,听众反响强烈。
4040 0
|
Hbase 分布式数据库 监控
阿里HBase高可用8年“抗战”回忆录
2018年双十一,HBase全天处理请求2.4万亿行,单集群吞吐达到千万级别。从一个婴儿成长为青年,阿里HBase摔过很多次,甚至头破血流,我们在客户的信任之下幸运的成长,感激涕零。2017年开始阿里HBase走向公有云,我们有计划的在逐步将阿里内部的高可用技术提供给外部客户,目前已经上线同城主备
2631 0
阿里HBase高可用8年“抗战”回忆录
|
Java Hbase
如何降低90%Java垃圾回收时间?以阿里HBase的GC优化实践为例
GC一直是Java应用中讨论的一个热门话题,尤其在像HBase这样的大型在线存储系统中,大堆下(百GB)的GC停顿延迟产生的在线实时影响,成为内核和应用开发者的一大痛点。
9409 0
|
人工智能 大数据 分布式数据库
中国HBase技术社区第三届MeetUp —HBase应用实践专场(杭州阿里西溪园区)
HBase—Hadoop Database是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。HBase的特点是高可靠性、高性能、面向列、可伸缩的分布式存储系统,如今HBase已经广泛应用于各互联网行业。
1788 0