HBase优化之路-合理的使用编码压缩-阿里云开发者社区

开发者社区> daniel.meng> 正文

HBase优化之路-合理的使用编码压缩

简介: 为什么要讨论HBase编码压缩 编码+压缩能够成倍的减少数据的磁盘占用空间,节省可观的存储费用 编码+压缩通常情况下可以提高系统吞吐率,让系统可以做更多的功 默认建表不启用编码或者压缩,对初学者不友好 了解HBase编码 举个栗子,我们有一张物流表叫"express",记录物流订单的流转详情。
+关注继续查看

为什么要讨论HBase编码压缩

  • 编码+压缩能够成倍的减少数据的磁盘占用空间,节省可观的存储费用
  • 编码+压缩通常情况下可以提高系统吞吐率,让系统可以做更多的功
  • 默认建表不启用编码或者压缩,对初学者不友好

了解HBase编码

举个栗子,我们有一张物流表叫"express",记录物流订单的流转详情。如下面表格:rowkey包含两个部分,用#号分割,左边是物流订单号,右边是物流信息的更新时间点。表包含两个列,一个物流状态,一个是物流描述信息

rowkey 状态列 描述信息列
10324224#2019-04-21 10:51 已发货 包裹正在等待揽收
10324224#2019-04-21 19:46 已揽件 [嘉兴市]平湖南桥的xxx已揽收
10324224#2019-04-21 19:46 运输中 [嘉兴市]快件已从平湖南桥出发,准备发往嘉兴中转部
10324224#2019-04-21 20:41 运输中 [嘉兴市]快件已到达嘉兴中转部
10324224#2019-04-21 20:42 运输中 [嘉兴市]快件已从达嘉兴中转部出发,准备发往杭州中转部
10324224#2019-04-21 22:50 运输中 [嘉兴市]快件已到达杭州中转部
... ... ...

我们对Rowkey进行编码得到如下

rowkey rowkey 前缀长度 状态列 详情列
10324224#2019-04-21 10:51 0 已发货 包裹正在等待揽收
19:46 20 已揽件 [嘉兴市]平湖南桥的xxx已揽收
19:46 20 运输中 [嘉兴市]快件已从平湖南桥出发,准备发往嘉兴中转部
20:41 20 运输中 [嘉兴市]快件已到达嘉兴中转部
20:42 20 运输中 [嘉兴市]快件已从达嘉兴中转部出发,准备发往杭州中转部
22:50 20 运输中 [嘉兴市]快件已到达杭州中转部
... ... ... ...

可以看到,除了第一行存储了完整的rowkey以外,其它行与首行进行了Diff,只保存了不相同的部分。除了rowkey编码以为,HBase还可以对版本号,更新类型等进行编码。HBase目前提供的可靠的编码包括“Prefix,Diff,Fast Diff, Index Encoding(阿里巴巴HBase团队研发的优化随机读场景的编码)”,更多关于编码的参考Compression and Data Block Encoding In HBase以及HBase数据压缩编码探索

了解HBase压缩

HBase压缩的对象是一行中的值,不包括rowkey、版本等。由于HBase的元数据中没有数据类型,因此HBase的压缩算法都是面向通用压缩场景,一般会有4-10倍的压缩率,下面表格介绍了各种压缩算法在不同场景下的收益

image

HBase还有其它的压缩算法如“Snappy,GZIP”。更多关于压缩的参考Compression and Data Block Encoding In HBase以及HBase数据压缩编码探索

如何选择HBase编码压缩

不同的场景下优化的侧重不同,选择的难度也不同。

  • 读少写多,大存储量场景

该场景通常是存储一些比较冷的数据,对请求的响应要求不高,对存储成本敏感。在存储介质上通常选择便宜的HDD、高效云盘。这些介质相比于SSD在IO吞吐和IOPS方面都要弱很多。这里我们选择高压缩比的压缩算法“ZSTD、GZIP”,编码选择Diff。比如“Diff+ZSTD”组合,不仅节省存储成本,同时会减少写入和Compaction对IO的压力(因为写入磁盘的数据量减少了),提升写吞吐量

注:压缩不是万金油,有时候数据写入前就压缩了,或者压缩率不理想,这时候设置压缩反而浪费了CPU,弄巧成拙。因此我们需要运行时数据来判断压缩比,进入HBase的Web UI,找到表‘t1’的详情页:

image

我们把Table Schema部分展开,看一下当前表的编码(DATA_BLOCK_ENCODING)和压缩(COMPRESSION)配置

image

然后我们继续向下看Table Regions,看到表‘t1’有两个分区分布在两台Region Server节点上。我们选择一个Region Server点进入

image

选择第一个Region Server进入

image

在Region Server的详情中,我们找到Regions部分,然后选择Storefile Metrics标签,下面是该Region Server上各个分区的文件详情。我们找到‘t1’表的分区,如上图红色框的哪一行,可以看到文件未编码压缩前是305MB,编码压缩后是49MB,压缩比是 1 :6.2

  • 读请求较多场景

该场景一般偏向在线,请求多且对延迟有一定要求。读的优化相比写要更复杂,这个和场景关联性很强,所以我们可以有一些策略和预判,但是还是需要实际的数据来指导优化,具体问题具体分析。总的来讲,读存在一个缓存“BlockCache”,缓存的命中率严重影响读的性能。默认的情况下BlockCache中的数据是可以保持“编码”,但是数据从磁盘读出后被解压存储在BlockCache,在2.0版本中新增了Compressed Block Cache(全表维度),使得Block Cache中的数据也可以处于压缩状态。

优势:
1 缓存一般的命中在20%~80%较常见,因此一定有相当量的请求要走磁盘IO,那么编码压缩有助于减少这部分IO的开销
2 编码和压缩都可以使得Block Cache缓存更多的数据,从而提高命中率。但具体的提升效果也和场景相关,随机读场景的提升就不如顺序读多的场景
3 由于缓存命中提高,缓存淘汰相应减少,有利于GC

劣势:
1 编码压缩增加了CPU的开销,在CPU资源吃紧的情况下会影响读写响应时间

总结,通常情况下建议编码压缩都打开,使用DIFF+ZSTD组合作为默认配置可以满足绝大部分场景。通过HBase WebUI以及监控观察压缩比,CPU负载,IO负载,缓存命中率,读写请求响应等指标来判断是否需要进一步调整编码压缩配置。

如何修改编码压缩

编码压缩是column family级别的,我们可以通过shell来在线修改

alter 't1', {NAME => 'info', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'ZSTD'}

注:修改表的编码压缩后并不是立即生效的,需要执行一次Major Compaction刷一遍数据文件,新生成文件才是新的编码压缩格式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Netbeans源代码编辑技巧——使用代码补全和代码生成
原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字。截至 NetBeans IDE 6.0,您现在甚至可以用代码补全来生成整个方法。
837 0
赣州网站建设一定要重视代码编写和后期优化
赣州网站建设过程对细节最为关注的两个步骤非代码的编写和后期的优化莫属,这两个过程,既有繁杂性,又有重要性,也是最能够体现网站质量的连个部门,一个要服务于本地电脑,一个要服务于搜索引擎,各司其职
1837 0
DES安全编码组件
  DES安全编码组件   支持 DES、DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)   DES           key size must be equal to 56   DESede(TripleDES) key size must be equal to 112 or 168   AES      
981 0
新型可扩展的数据保护方式——擦除编码
一、概述   在之前存储系统中,一般都采用RAID技术来对数据进行保护,一旦阵列中某块硬盘损坏,可通过RAID技术所形成的镜像来对丢失数据进行恢复。但随着海量数据问题的出现,RAID越来越难发挥其作用。
1102 0
Linux系统中使用GCC CPU参数优化代码编译
Linux系统中使用GCC CPU参数优化代码编译 使用特定的GCC参数可以使编译出的程序执行效率有较大提升。具体如下: 1、优化原理: 在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU而进行特定优化过的,因而执行速度和效率都会是最好。
733 0
Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor
原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一、工具概要     数据库应用系统性能低下,需要对其进行优化,     如果不知道问题出在哪里,可以使用性能检测工具sql server profiler。
1660 0
页面优化的方法SEO包括哪些内容
页面搜索引擎优化技术将提升你的排名 在页面上SEO是你可以使用的最重要的过程之一,不仅是为了获得更高的排名,而且是为了运行成功的SEO活动。 网站是所有SEO流程的焦点,如果它没有针对搜索引擎和用户进行适当优化,那么您的成功几率就会降到最低。
876 0
使用GTMBase64编码解码字符串
使用GTMBase64编码解码字符串 说明:BASE64不是用来加密的。你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。
818 0
+关注
daniel.meng
专注在大数据领域,拥有多年分布式、高并发、大规模系统的研发与实践经验,先后参与hbase、phoenix、lindorm等产品的内核引擎研发,目前负责阿里上万节点的HBase As a Service的发展与落地
15
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载