生产环境使用HBase,你必须知道的最佳实践
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
前面,我们已经打下了很多关于HBase的理论基础,今天,我们主要聊聊在实际开发使用HBase中,需要关注的一些最佳实践经验。
Schema设计七大原则
1)每个region的大小应该控制在10G到50G之间;
2)一个表最好保持在 50到100个 region的规模;
3)每个cell最大不应该超过10MB,如果超过,应该有些考虑业务拆分,如果实在无法拆分,那就只能使用mob;
4)跟传统的关系型数据库不同,一个HBase的表中列族最多不超过3个,列族中的列可以动态添加的,不要设计过多列族;
5)列族名必须尽量短,因为我们知道在存储的时候,每个keyvalue都会包含列族名;
6)如果一个表存在一个以上的列族,那么必须要注意,不同列族之间行数相差不要太大。例如列族A有10万行,而列族B有1亿行,那么rowkey就有1亿行,而region是按照行键进行切分的,因此列族A可能会被打散为很多很多小region,这会导致在扫描列族A时会引发较多IO,效率低下。
7)列族可以设置TTL时间,HBase在超过设定时间后,会自动删除数据。
设置方法有两种:
建表时设置,TTL单位为秒,此例中列簇'f1'的数据保留1天(86400秒)
hbase(main):002:0>create 'table', {NAME => 'f1', TTL => 86400}
通过修改表设置
hbase(main):002:0>alter 'table', {NAME => 'f1', TTL => 86400}
这里需要注意,一旦超过设定时间后,该数据就无法读取了,但是,真正的过期数据删除,是发生在major compaction时。
.
RowKey设计三大策略
HBase作为一个分布式存储数据库,虽然扩容非常容易,但是,对于“热点”问题,还是非常头疼的。
所谓“热点”问题(HotSpotting),就是请求(读或者写)短时间内落在了集中的个别region上,导致了该region所在机器的负载急剧上升,超过了单点实例的承受能力,从而引起性能下降或者不可用。
要解决这个问题,就需要设计RowKey时,使得数据尽量往多个region上去写。
举个例子:
假如region按照26个字母分成26个,那么同时写入m开头的rowkey的记录都会同时写入同一个region
比如m001,m002,m003,m004,m005。
因此,RowKey的设计非常关键。常见的设计策略有这么几种。
1)salting
salting策略就是将生成随机数放在行键的开头作为前缀,使得每个行键有随机的字典序。
对上面的案例进行优化,我们采用了salting策略,插入前给每个rowkey生成一个随机的字母,变成了
am001,zm002,nm003,qm004,lm005
这样就能同时往5个region里面写入了,成功打散。
副作用:由于前缀生成是随机的,因此如果想要按照字典序查询这些行,则需要做更多的事情。从这个角度上看,salting增加了写操作的吞吐量,却也增大了读操作的开销。
2)Hashing
Hashing策略也是一种特殊的salting,是用一个单向的 hash 来取代随机指派前缀。
这样能使一个给定rowkey的行在“salted”时有相同的前缀,因此,这样既可以分散RegionServer间的负载的,同时也允许在读操作时能够预测这个前缀值是什么。确定性hash( deterministic hash )可以让客户端重建完整的行键,然后就可以像正常一样用Get方法查询确定的行。
3)reverse key
第三种预防hotspotting的方法是反转一段固定长度或者可数的键,让变化最多的某个位置放在rowkey的第一位,
副作用:对于Get操作没有影响,但是不利于Scan操作进行范围查询,因为数据在原RowKey上的顺序已经被打乱。
预分区
在 HBase核心特性—region split 中,我们知道已经提到过关于预分区。
主要原因是当一张表被首次创建时,只会分配一个region给这个表。因此,在刚刚开始时,所有读写请求都会落在这个region所在的region server上,而不管你整个集群有多少个region server。不能充分地利用集群的分布式特性。
因此,预分区主要也是解决“热点”问题。
最为常见的建表语句为:
create ‘tb’,{NAME => ‘f1’,COMPRESSION => ‘snappy’ }, { NUMREGIONS => 50, SPLITALGO => ‘HexStringSplit’ }
NUMREGIONS 为 region的个数,一般按照每个region 8-10GB左右来计算region数量,如果集群规模非常大,那么region数量可以适当取大一些
SPLITALGO 为 rowkey分割的算法,Hbase自带了三种pre-split的算法,分别是 HexStringSplit、DecimalStringSplit 和 UniformSplit。
各种Split算法适用场景:
HexStringSplit: rowkey是十六进制的字符串作为前缀的
DecimalStringSplit: rowkey是10进制数字字符串作为前缀的
UniformSplit: rowkey前缀完全随机
读性能优化
前面主要讲一些设计方面的优化点。
那如果在HBase的使用过程中,发现查询较慢,那么就需要根据具体情况,分析查询慢的原因,并采取相应的策略。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-03-24
本文作者: 阿丸笔记
本文来自:“CSDN云计算”,了解相关信息可以关注“CSDN云计算”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【云栖号案例 | 新零售】ADB助力Flowerplus花加提速业务 使订阅鲜花成为一种习惯
云栖号案例库:【点击查看更多上云案例】不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 公司介绍 Flowerplus花加是中国鲜花电商第一品牌,首创“日常鲜花订阅”模式,捕捉都市白领日常鲜花消费的市场空白,是一个颠覆了传统鲜花消费模式的创新品牌。自2015年创立之初就将战略眼光定位于“培育人们日常用花、赏花的消费习惯”。凭借对市场需求空白地带的成功捕捉和创新的“线上订阅+产地直送+增值服务”的商业模式,目前已成为中国鲜花电商领导品牌。 截止目前,Flowerplus花加付费用户数过800万人,月发货量过200万件,单月销售额最高过亿,2016年销售3亿,2017年销售近8亿,2019年实现盈利千万,处于行业绝对领先位置。对比市场中不断强调“颠覆”的创业公司,花加在创业创新过程中的主要驱动力,是其不断去思考和探索“以用户价值为核心”的本质,并在此基础上给予还未被满足的用户需求、填补还需被完善的市场空隙。 业务痛点 花加业务主要业务是涉及和售卖鲜花产品,由于花加业务涉及实体采购以及物流,需要通过报表和BI来分析和支持库存情况、采购链路、物流进展、业务转...
- 下一篇
Delta Lake 平台化实践(离线篇)
原文链接:https://blog.csdn.net/lsshlsw/article/details/103553289 博客主:breeze_lsw 01 SQL 支持 1.1 DML 背景 delta lake 0.4 只支持以 api 的方式使用 Delete/Update/Merge Into 等 DML,对习惯了使用 sql 的终端用户会增加其学习使用成本。 解决方式 下文通过 spark sql extension 以插件化的方式扩展 sql parser ,增加 DML 语法的支持。在 spark 推出 sql extension 功能前,也可以用通过 aspectj 通过拦截 sql 的方式实现增加自定义语法的功能。 1.在自定义扩展 g4 文件中相应的 antlr4 DML 语法,部分参考了 databricks 商业版的语法 st
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境