来源 | 阿丸笔记

封图| CSDN 下载于视觉中国

前面,我们已经打下了很多关于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的使用过程中,发现查询较慢,那么就需要根据具体情况,分析查询慢的原因,并采取相应的策略。

防疫、复工如何并行?天云数据推出人工智能监测方案!到底如何做到事前预防,而不是事后诸葛亮?本周四晚8点,天云数据VP陈勇为各位揭晓答案!扫描下方二维码免费报名~

今日福利:评论区留言入选,都可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。  快来动动手指,写下你想说的话吧

推荐阅读:只要 8 个步骤,学会这个 Docker 命令终极教程!
2020 年,为什么非要采用 DevOps 文化不可?
近 10 年新秀编程语言大 PK,Pick 它!
5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?
你的企业在什么情况下需要人工智能?快来看看你需要具备哪些条件与能力!
自称中本聪的他被法官怒怼:你的证词毫无可信度!
真香,朕在看了!

生产环境使用HBase,你必须知道的最佳实践相关推荐

  1. 非易失性内存在阿里生产环境的首次应用:Tair NVM最佳实践总结

    阿里妹导读:本文介绍了非易失性内存在阿里巴巴集团生产环境的首次应用:线上运行的情况:使用NVM遇到的问题和优化的过程:最后,总结性地给出了基于NVM构建缓存服务的设计要点,希望这些实践总结能对大家的工 ...

  2. hbase中为何不能向表中插入数据_生产环境使用HBase,你必须知道的最佳实践 | 百万人学AI...

    叮咚-你被福利砸中了!现在起,「2020 AI开发者万人大会」299门票免费送!进入报名页面[2020 AI 开发者万人大会(线上直播门票)-IT培训直播-CSDN学院],点击"立即报名&q ...

  3. Mysql生产环境表更新方案_生产环境中,数据库升级维护的最佳解决方案flyway

    官网:https://flywaydb.org/ 转载:http://casheen.iteye.com/blog/1749916 1.  引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的 ...

  4. 关于Python环境下WindowsMac 升级pip的方法最佳实践(附pip常用命令)

    升级pip的最佳实践 升级pip有很多种方法,以下列举我使用的两种方法,并对它们的优缺点进行总结: Mac电脑中操作 使用pip install --user --upgrade pip命令升级pip ...

  5. hbase scan超时设置_如何在优化生产环境的hbase

    hbase 是hadoop生态圈的一员,在数据服务应用中具有举足轻重的地位,我们当然有必要掌握,hbase日常的大部分应用在数据查询服务中,因此查询的时候必然涉及到scan操作,因此在建表的时候就要对 ...

  6. hbase数据库scan操作_HBase最佳实践之Scan

    一.简介 HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI.TableScanMR以及SnapshotScanMR.三种用法的原理不尽相同,扫描效率当然相差甚远,最重要的是这几种用 ...

  7. Sentinel(十五)之在生产环境中使用 Sentinel

    转载自  在生产环境中使用 Sentinel 引言 Sentinel 目前已可用于生产环境,除了阿里巴巴以外,也有很多企业在生产环境中广泛使用 Sentinel. 生产环境的 Sentinel Das ...

  8. hbase 命令_HBase原理与实践 | 生产环境上线前真的优化过吗?

    笔者今天给大家讲一下 HBase 生产环境中的实践,包括资源隔离.参数配置.性能优化等方面,部分内容参考<HBase原理与实践>(非常建议大家好好读一读,一定会大有收获),以及笔者的实战经 ...

  9. 15分钟从零开始搭建支持10w+用户的生产环境(二)

    上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一)   二.数据库的选择 对于一个10W+用户的系统,数据库选择很重要. 一 ...

最新文章

  1. 说得太好了!阿里巴巴为什么不用 ZooKeeper 做服务发现?
  2. Android Studio 添加Assets目录
  3. 【redis】布隆过滤器详解
  4. c语言编程基本概念,读朱兆祺攻破C语言之一----编程基本概念
  5. 删除-Trustzone-TEE-ATF
  6. 本地计算机上的SQL Server(MSSQLSERVER)服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止...
  7. Dev-Cpp 常用的快捷键(持续更新)
  8. 【渝粤教育】国家开放大学2018年春季 0111-21T妇产科护理学 参考试题
  9. maven安装本地jar到本地仓库
  10. 拓端tecdat|在Python中使用LSTM和PyTorch进行时间序列预测
  11. flask之--钩子,异常,上下文,flask-script,模板,过滤器,csrf_token
  12. 自制的基Ogre的场景编辑器—OgreSE
  13. 渗透测试漏流程(PTES)
  14. fiddler+xpose_JustTrustMe: 解决app应用在开启抓包工具后无法联网问题
  15. 【笔记】第2章 向量
  16. 找不到xinput1_3.dll怎么办?如何修复dll文件缺失
  17. 量化投资必备手册:史上超全量化交易平台汇总
  18. 用freepy一键生成中美GDP季度对比柱状图
  19. CAD中样条曲线Spline怎样才能分解成多段弧arc?
  20. 红队搬运工-github项目-第一期

热门文章

  1. c语言根据图片轮廓图,c语言通过opencv实现轮廓处理与切割
  2. 5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...
  3. kb4023057安装失败_微软重发Win10 KB4023057 补丁,推动Win10更新
  4. java右移位_java 、移位操作方法
  5. dbf文件怎么创建_ThinkPHP6开发博客实战入门(三),创建admin后台入口
  6. 杨振宁在物理学界的地位和成就
  7. QS首发大学百强排名,华东五校表现惊艳,老牌985望尘莫及
  8. 江山如此多娇,大美中国
  9. 别傻啦,不会高数,你连人话都听不懂
  10. pb 打印html页面,用PB开发WEB应用