美文网首页
HBase权威指南(六)高级用法及调优

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

作者: kaiker | 来源:发表于2022-03-19 16:27 被阅读0次

    1、行键设计

    概念

    • 实际上底层存储是按列族线性地存储单元格
    • 列包括了HBase特有的列族和列限定符,从而组成列键。
    • 磁盘上一个列族下所有的单元格都存储在一个存储文件中,不同列族的单元格不会出现在同一个存储文件中。
    • 每个单元格在实际存储时保存了行键和列键,所以每个单元格都单独存储了它在表中所处位置的相关信息。
    • 单元格按时间戳降序排列。
    • 含有结构信息的整个单元格在HBase中被叫做KeyValue。
    存储结构
    • 从存储结构上看,列限定符开始就需要检查每个送到过滤器的KeyValue。值筛选性能会更差。
    查询性能递减

    高表宽表

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

    部分键扫描

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

    时间序列

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


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

    2、辅助索引

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

    • 由客户端管理索引。把责任完全转移到应用层的典型做法是把一个数据表和一个查找映射表结合起来。每当数据写数据表时,它也同时更新映射表。
    • 带索引的事务型HBase。增加了用来保证所有的辅助索引更新操作一致性的事务功能。
    • 带索引的HBase。完全在内存中维护索引。

    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最佳实践

    • 禁止自动刷写,当有大量写入操作时,如果不关闭自动刷写,Put实例会被逐个传送到region服务器,如果关闭,则会等到缓冲区填满才送出。
    • 使用扫描缓存。以免频繁请求region服务器。
    • 限定扫描范围。addFamily
    • 关闭ResultScanner。如果忘记关闭ResultScanner实例,会对服务端造成影响。
    • 块缓存。对频繁访问的行,建议使用块缓存。
    • 优化行键获取方式。在Scan中添加一个带MUST_PASS_ALL操作符的FilterList。会把发现的第一个KeyValue行键返回给客户端。

    配置

    • 减少zookeeper超时发生
    • 增加处理线程
    • 增加堆大小
    • 启用数据压缩
    • 增加region大小,管理较少的region可以让集群运行更平稳,但是高负载下合并会停顿更长。
    • 调整块缓存大小
    • 调整memstore限制
    • 增加阻塞时存储文件数目,当存储文件的数目达到阈值时,更新操作将会被阻塞,并以此来给合并操作留出时间来减少存储文件的数目。
    • 增加阻塞倍率
    • 减少最大日志文件限制

    相关文章

      网友评论

          本文标题:HBase权威指南(六)高级用法及调优

          本文链接:https://www.haomeiwen.com/subject/tdggdrtx.html