HBase基础知识分享(二)

news/2024/11/14 19:45:03/文章来源:https://www.cnblogs.com/cjybigdatablog/p/18546624

HBase的Split机制

Region的分裂策略

HBase中的Region存储的是一张表的数据。当Region中的数据条数过多时,会直接影响查询效率,过大的Region会被拆分为两个Region,HMaster会将这些分裂的Region分配到不同的RegionServer上,最终达到负载均衡的目的,这是HBase的一个优点。

常见的Region分裂策略:

  1. ConstantSizeRegionSplitPolicy

    • 0.94版本前是HBase默认的Region切分策略。
    • 当Region中最大的Store大小超过某个阈值(hbase.hregion.max.filesize=10G)时,触发Region的切分。
    • 然而,这种策略对大表和小表没有明显区分:
      • 大表:阈值设置较大时对大表友好,但小表可能不会触发分裂。
      • 小表:阈值设置较小时对小表友好,但会在集群中产生大量的Region,增加资源管理和failover的负担。
  2. IncreasingToUpperBoundRegionSplitPolicy

    • 0.94版本到2.0版本是HBase的默认切分策略。
    • 切分阈值基于Region的数量动态调整,随着Region数量的增加,切分阈值逐渐增大,避免大量小Region的产生。
    • 该策略更加自适应大表、小表,但对小表不太友好,可能导致大量小Region分布在不同RegionServer上。
  3. SteppingSplitPolicy

    • 2.0版本后默认的切分策略。
    • 简单高效。根据Region数量调整切分阈值:
      • 当Region数目为1时,使用较小的阈值(128M*2)。
      • 否则,使用最大Region文件大小(MaxRegionFileSize)。
    • 对大集群的适应性好,不会导致大量的小Region,并且较适用于小表。
  4. KeyPrefixRegionSplitPolicy

    • 根据RowKey的前缀进行数据分区,例如RowKey是16位,指定前5位作为前缀进行切分。
  5. DelimitedKeyPrefixRegionSplitPolicy

    • KeyPrefixRegionSplitPolicy类似,但切分时使用指定的分隔符,例如RowKey格式为userid_eventtype_eventid,指定_为分隔符进行切分。
  6. BusyRegionSplitPolicy

    • 依据Region是否“繁忙”来判断是否需要拆分。如果系统常常会出现热点Region,并且对性能有较高要求,可以考虑使用此策略。
  7. DisabledRegionSplitPolicy

    • 不启用自动拆分,需要手动拆分Region。

RowKey设计的原则

1. RowKey唯一原则

  • RowKey必须保证唯一性,HBase是按照字典顺序存储数据的,因此设计RowKey时应充分利用这种特性,将常访问的数据存储在同一区域。

2. RowKey长度原则

  • RowKey的长度一般建议不超过100字节。过长的RowKey会占用更多的内存和存储空间,影响HFile的存储效率,同时减少MemStore和BlockCache的缓存效率,降低检索效率。

3. RowKey散列原则

  • 如果RowKey按照时间戳等递增模式设计,可能导致热点问题。为了避免这种问题,可以将RowKey的高位设计为散列字段,低位放置时间戳等字段,这样可以将数据均衡分布到不同RegionServer上,避免热点。

HBase热点问题

1. 什么是热点问题?

  • 在HBase中,数据按照RowKey排序并存储。如果某些RowKey频繁被访问,数据会集中存储在同一个Region,可能导致:
    • 某个Region的负载过高。
    • 某个RegionServer被过度请求,成为瓶颈。
    • 集群负载不均,造成资源浪费和性能瓶颈。

2. 导致热点问题的原因

  • 顺序写入:如使用递增的ID或时间戳,导致写入操作集中在同一个Region。
  • 过度集中在某些RowKey范围:某些特定的RowKey频繁被访问,导致特定Region频繁被请求。
  • RowKey缺乏随机性:如果RowKey设计缺乏随机性,访问会集中在某个Region,导致负载不均。

3. 如何避免和解决热点问题

  • 随机化RowKey:例如在RowKey前加上随机数,或者使用逆序时间戳来避免顺序写入带来的热点问题。
  • 使用时间区间分区(预分裂):在表创建时进行预分裂,将RowKey按时间或其他特征进行分区,避免数据集中在某个Region。
  • 更复杂的RowKey设计:例如使用复合型RowKey,结合多种字段(如用户ID、时间戳等)进行设计,从而实现数据的均匀分布。
  • 动态扩展与负载均衡:通过Region Split或Region Merge操作,及时调整Region的分布,解决热点问题。
  • 监控与调优:实时监控RegionServer的负载情况,通过调整策略解决热点问题。

HBase的Flush机制

触发条件

  • Region中的MemStore占用内存超过阈值:如果MemStore的占用内存超过hbase.hregion.memstore.flush.size(默认为128MB),会触发Flush操作。
  • RegionServer的MemStore占用内存超过阈值:当RegionServer中所有Region的MemStore占用内存超过阈值时,Flush操作会被触发。
  • WAL数量超过阈值:如果RegionServer的WAL数量或大小超过某个阈值,MemStore会被触发Flush。
  • 定期自动刷写:通过定期检查MemStore,触发定时的Flush操作。

触发操作

常见的操作,如putdeleteappendincr等,会触发Flush操作。此外,Region的分裂、Merge操作、bulkLoad HFiles、快照等操作也会触发Flush。

Flush策略

  • FlushAllStoresPolicy:每次刷写都会触及Region中的所有MemStore。
  • FlushAllLargeStoresPolicy:首先判断MemStore是否超过某个阈值,如果超过则触发刷写。
  • FlushNonSloppyStoresFirstPolicy:优先刷写内存占用大的、非Sloppy类型的MemStore。

HBase的Compaction机制

Minor Compaction

Minor Compaction指的是将相邻的小StoreFile合并为更大的StoreFile,不会处理已删除或过期的数据。结果是StoreFile变少,文件更大。

Major Compaction

Major Compaction会将所有StoreFile合并为一个StoreFile,并清理无效数据(如已删除的数据、过期数据)。这一过程消耗大量资源,通常会在低峰时手动触发。

二级索引

  • 基于一级索引之上构建的索引
  • 为什么构建二级索引:HBase默认的RowKey是唯一且只能做前缀匹配查询,查询条件如果不是RowKey的前缀,查询效率较低。通过二级索引可以提高查询性能,尤其是当查询条件不包含RowKey时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833587.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centOS7 docker 安装步骤

一、安装前检查工作: 1.检查/etc/yum.repos.d/CentOS-Base.repo文件是否存在,如果不存在,从网络仓库中复制一份新的 CentOS-Base.repo 文件。 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或者使用 wget: sudo wget -O /…

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

目录docker registry 部署生成 htpasswd 文件生成 secret 文件生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registrydocker registry 监控docker registry uidocker registry dockerfile docker registry 配置文件 S3 storage driver registry…

[68] (炼石计划) NOIP 模拟赛 #20

学了一个挺帅的 MerMaid 所以用一下 flowchart TBA(邻间的骰子之舞)style A color:#ffffff,fill:#00c0c0,stroke:#ffffff 考虑每次复制以后一定会粘贴若干次(大于零,否则没有意义),因此将复制粘贴捆绑起来考虑,设复制后连续粘贴了 \(m\) 次,则代价为 \(x+my\),贡献为让编…

团队项目Scrum冲刺-day4

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 用户模块接口开发凌枫 整合MD编辑器陈卓恒 完成管理题目页面谭立业 完成题目搜索页面廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 完成题目模块接口开发薛秋昊 完成题目提交模块接口开发今天计划完成…

【闲话】先觉

题图太大了,遂放到里面了能 窥探 到未来的 命运 又怎样? 不愿向 命运 屈服,自以为一次次地“战胜” 命运 后却不知一切都是 命运 早就 安排 好的。亦或是他即是 命运 的代理人。 不久后的 毁灭 已成为他的梦魇,面对好友的一个个离去他 无能为力 ,只好请求 那位大人 伸出援…

团队作业4——项目冲刺-4

团队作业4——项目冲刺-4信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 在七天敏捷冲刺中,完成工大严选开发,记录每日进展和问题,更新燃尽图、签入代码,并发布集合日志总结成果GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗…

MX 2025--炼石计划 NOIP 模拟赛 #20

斥责打得抽象。T3,T4放俩难的板子。由于是MX的题,就不放题意了。 邻间的骰子之舞 发现复制操作不会超过\(64\)次,而粘贴操作肯定是越均匀越好,直接二分暴力跑就行了。点此查看代码 #include<bits/stdc++.h> using namespace std; #define rep(i,s,t,p) for(int i = s;…

EBS:物料搬运单查看人限制(创建人栏位)

EBS:物料搬运单查看人限制(创建人栏位)Applies to:Oracle Inventory Management - Version: 11.5.9 to 12.0.0 - Release: 11.5 to 12.2Information in this document applies to any platform.FORM:INVTOMAI.FMB - Response CenterSymptomsIn the Move Orders form (INVTOMA…

实景三维赋能智慧公安建设

在新型智慧城市建设的大潮中,智慧公安作为关键一环,对于提高城市安全和治理效率具有重要意义。实景三维技术以其独特的优势,为智慧公安建设提供了强有力的支撑。本文将探讨实景三维技术如何赋能智慧公安建设。一、智慧公安建设的重要性智慧公安是利用现代信息技术,实现对城…

OpenAI模型whisper 音频转文本

最近有一个音频转文本的需求,了解到了OpenAI的whisper模型可以实现。 Whisper 是 OpenAI 提供的一个通用语音识别模型,支持多语言的音频转文本功能,并具有较高的准确性。它的主要用途包括自动语音识别 (ASR)、语言翻译(将音频直接翻译成英文文本)等。Whisper 支持将长时间…

想定制RK3562主板Android系统的开机动画和桌面壁纸吗?看这篇文章就够了

本文介绍瑞芯微RK3562开发板在安卓Android13系统替换开机动画和桌面壁纸的方法,使用触觉智能EVB3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1T算力 NPU,可用于轻量级人工智能应用。 开机动画替换 将做好的开机动画文件bootanimation.zip包拷贝至 vendor/roc…

mysql可视化工具 Navicat Premium 12解压版

通过网盘分享的文件:Navicat Premium 12解压版.rar链接: https://pan.baidu.com/s/1kDLlrcaiQRYGLfN5L-IpPA?pwd=3k6h 提取码: 3k6h --来自百度网盘超级会员v8的分享1.解压到指定路径 2.快捷方式,快捷方式用不了,就直接在该文件中直接打开 3. 测试链接