HBase权威指南(六)高级用法及调优

2022-03-19  本文已影响0人  kaiker

1、行键设计

概念

存储结构 查询性能递减

高表宽表

HBase只能按行分片,因此高表更有优势。

部分键扫描

HBase的扫描功能和基于HTable的API更适合在高表上筛选数据,用户可以通过只包含部分键的扫描检索数据
行键是按字典序排序的,因此将行键进行设计,把每一个需要的字段都进行补齐,可以利用这种机制。

时间序列

由于行键可能出现热点,因此可以进行一些操作避免


salting
不同方式解决顺序读的性能变化

2、辅助索引

通常的需求是用户能够通过主坐标(行键、列族和列限定符)来查找一个单元格,也可以通过一个其他类型的坐标来进行查找。

3、布隆过滤器

https://www.cnblogs.com/heihaozi/p/12174478.html

布隆过滤器

文件的块索引覆盖了整个行键范围。
文件可以立刻判断不包含,包含可能是误判。

行或行列布隆过滤器

主要在有更新小部分列且按列读且单元格较大,使用行列布隆过滤器

https://blog.csdn.net/qq_38180223/article/details/80922114

4、性能优化

垃圾回收优化

用户需要调整的一组较为底层的reigon服务器启动参数时垃圾回收参数。
写入量过大的负载,会迫使内存分配策略无法安全地只依赖JRE对程序的各种假设。
对写入负载过大的情况来说,memstore在不同时期创建并释放着各种不同大小的对象。
写入磁盘的数据是由客户端在不同时间写入的,那么他们占据的java堆空间很可能是不连续的,所以Java虚拟机的堆内存会出现孔洞。
调整年轻代空间的大小十分重要,这样生存期较长的对象不会过快地引起老生代产生内存碎片。但年轻代太大可能会引起回收时较长的停顿。

本地memstore分配缓冲区

生存期长的KeyValue实例一旦刷写磁盘,就会在老生代的堆上产生孔洞。申请新空间时,由于碎片过多导致没有足够大的连续空间分配。
MSLAB设计,只允许从堆中分配相同大小的对象。一旦这些对象分配并且最终被回收,它们将在堆中留下固定大小的孔洞。

压缩

CPU压缩和解压消耗的时间比从磁盘IO消耗时间更短。

优化拆分和合并

拆分合并风暴:当用户的region大小以恒定的速度保持增长时,region拆分会在同一时间发生。这需要用户手动进行split,尽可能分散IO负载。
region热点,建议对行键进行saltkey 盐析设计。
预拆分region,不推荐让单个region过大,可以在表创建时,有较大数量的region。

负载均衡

hbase.balancer.period 一旦启动将会尝试均匀分配region到所有region服务器

客户端API最佳实践

配置

上一篇 下一篇

猜你喜欢

热点阅读