HBase(七): HBase体系结构剖析(下)

Hbase Compaction 队列数量较大分析(压缩队列、刷新队列) 前几天朋友公司Hbase集群出现Compaction队列持续处于比较大的情况,并且mem flush队列也比较大,一起看了下问题,大概情况如下图 从图中可以看出来压缩队列总和持续在1000-2000,平对压缩队列在200左右,刷新队列也比较高,当然压缩队列高的原因就是因为我们 MemStore Flush 比较频繁,导致写入的StoreFile数量增加,触发了Compcation。 问题原因分析 我们先说下什么情况下会触发Compaction 1.后台线程周期性检查: multiplier=1000,c 阅读详情

HBase(七): HBase体系结构剖析(下)

Posted on 2016-09-10 22:18 天戈朱 阅读(1019) 评论(0) 编辑 收藏

目录:

  • write
  • Compaction
  • splite
  • read

Write:


  • 当客户端发起一个Put请求时,首先根据RowKey寻址,从hbase:meta表中查出该Put数据最终需要去的HRegionServer
  • 客户端将Put请求发送给相应的HRegionServer,在HRegionServer中它首先会将该Put操作写入WAL日志文件中(Flush到磁盘中),如下图:
  • 写完WAL日志文件后,HRegionServer根据Put中的TableName和RowKey找到对应的HRegion,并根据Column Family找到对应的HStore
  • 将Put数据写入到该HStore的MemStore中。此时写成功,并返回通知客户端
  • 上一节介绍过,MemStore是一个In Memory Sorted Buffer,在每个HStore中都有一个MemStore,即它是一个HRegion的一个Column Family对应一个实例。
  • 它的排列顺序以RowKey、Column Family、Column的顺序以及Timestamp的倒序,如下示意图:
  • 每一次Put请求都是先写入到MemStore中,当MemStore满后会Flush成一个新的StoreFile(底层实现是HFile),即一个HStore(Column Family)可以有0个或多个StoreFile(HFile)
  • 注意:MemStore的最小Flush单元是HRegion而不是单个MemStore, 这就是建议使用单列族的原因,太多的Column Family一起Flush会引起性能问题
  • MemStore触发Flush动作的时机:
    1. 当一个MemStore的大小超过了hbase.hregion.memstore.flush.size的大小,此时当前的HRegion中所有的MemStore会Flush到HDFS中
    2. 当全局MemStore的大小超过了hbase.regionserver.global.memstore.upperLimit的大小,默认40%的内存使用量。此时当前HRegionServer中所有HRegion中的MemStore都会Flush到HDFS中,Flush顺序是MemStore大小的倒序,直到总体的MemStore使用量低于hbase.regionserver.global.memstore.lowerLimit,默认38%的内存使用量
    3. 待确认:一个HRegion中所有MemStore总和作为该HRegion的MemStore的大小还是选取最大的MemStore作为参考?
    4. 当前HRegionServer中WAL的大小超过了hbase.regionserver.hlog.blocksize * hbase.regionserver.max.logs的数量,当前HRegionServer中所有HRegion中的MemStore都会Flush到HDFS中,Flush使用时间顺序,最早的MemStore先Flush直到WAL的数量少于hbase.regionserver.hlog.blocksize * hbase.regionserver.max.logs
    5. 注意:因为这个大小超过限制引起的Flush不是一件好事,可能引起长时间的延迟
  • 在MemStore Flush过程中,还会在尾部追加一些meta数据,其中就包括Flush时最大的WAL sequence值,以告诉HBase这个StoreFile写入的最新数据的序列,那么在Recover时就直到从哪里开始。在HRegion启动时,这个sequence会被读取,并取最大的作为下一次更新时的起始sequence,如下图:

Compaction:


  • MemStore每次Flush会创建新的HFile,而过多的HFile会引起读的性能问题,HBase采用Compaction机制来解决这个问题
  • HBase中Compaction分为两种:Minor Compaction和Major Compaction
    1. Minor Compaction: 是指选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,在这个过程中不会处理已经Deleted或Expired的Cell。一次Minor Compaction的结果是更少并且更大的StoreFile, 如下图:
    2. Major Compaction: 是指将所有的StoreFile合并成一个StoreFile,在这个过程中,标记为Deleted的Cell会被删除,而那些已经Expired的Cell会被丢弃,那些已经超过最多版本数的Cell会被丢弃。一次Major Compaction的结果是一个HStore只有一个StoreFile存在
    3. Major Compaction可以手动或自动触发,然而由于它会引起很多的IO操作而引起性能问题,因而它一般会被安排在周末、凌晨等集群比较闲的时间, 如下示意图:
  • 修改Hbase配置文件可以控制compaction行为
    1. hbase.hstore.compaction.min :默认值为 3,(老版本是:hbase.hstore.compactionThreshold),即store下面的storeFiles数量 减去 正在compaction的数量 >=3是,需要做compaction
    2. hbase.hstore.compaction.max 默认值为10,表示一次minor compaction中最多选取10个store file
    3. hbase.hstore.compaction.min.size 表示文件大小小于该值的store file 一定会加入到minor compaction的store file中
    4. hbase.hstore.compaction.max.size 表示文件大小大于该值的store file 一定会被minor compaction排除

splite:


  • 最初,一个Table只有一个HRegion,随着数据写入增加,如果一个HRegion到达一定的大小,就需要Split成两个HRegion,这个大小由hbase.hregion.max.filesize指定
  • split时,两个新的HRegion会在同一个HRegionServer中创建,它们各自包含父HRegion一半的数据,当Split完成后,父HRegion会下线,而新的两个子HRegion会向HMaster注册上线
  • 处于负载均衡的考虑,这两个新的HRegion可能会被HMaster分配到其他的HRegionServer,示意图如下:
  1. 在zookeeper上创建ephemeral的znode指示parent region正在splitting
  2. HMaster监控父Regerion的region-in-transition znode
  3. 在parent region的文件夹中创建临时split目录
  4. 关闭parent region(会flush 所有memory store(memory file),等待active compaction结束),从现在开始parent region 不可服务。同时从本地server上offline parent region,每个region server都维护了一个valid region的list,该步将parent region从该list中移除
  5. Split所有的store file,这一步为每个文件做一个reference file,reference file由两部分组成
    1. 第一部分是源文件的路径,第二部分是新的reference file引用源文件split key以及引用上半截还是下半截
    2. 举个例子:源文件是Table1/storefile.11,split point 是key1, 则split 成两个子文件可能可能是Table1/storefile.11.bottom.key1,Table1/storefile.11.up.key1,表示从key1切开storefile.11后,两个引用文件分别引用源文件的下半部分和上半部分
  6. 创建child region
    1. 设置各种属性,比如将parent region的访问指标平分给child region,每人一半
    2. 将上面在parent 文件夹中生成的临时文件夹(里面包含对parent region的文件reference)move到表目录下,现在在目录层次上,child region已经跟parent region平起平坐了
  7. 向系统meta server中写入parent region split完毕的信息,并将child region的名字一并写入(split状态在meta层面持久化)
  8. 分别Open 两个child region,主要包含以下几个步骤:
    1. 将child region信息写入meta server
    2. Load 所有store file,并replay log等
    3. 如果包含reference文件,则做一次compaction(类似merge),直到将所有的reference文件compact完毕,这里可以看到parent region的文件是会被拆开写入各个child regions的
  9. 将parent region的状态由SPLITTING转为SPLIT,zookeeper会负责通知master开始处理split事件,master开始offline parent region,并online child regions
  10. Worker等待master处理完毕之后,确认child regions都已经online,split结束

 read:


  • 根据Rowkey寻址(详情见上一节寻址部分),如下图:
  • 获取数据顺序规则,如下图:

 

参考资料:


 

分类: HBase

标签: HBase

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
【活动】申请成为华为云云享专家 尊享9大权益
【腾讯云】拼团福利,AMD云服务器8元/月

腾讯云1129

剖析大数据领域HBase的网络通信协议 HBase作为大数据领域中一款重要的分布式列式数据库,广泛应用于海量数据的存储和处理。其网络通信协议是保证各个组件之间高效、稳定通信的关键。本文的目的是深入剖析HBase的网络通信协议,详细讲解其原理、实现和应用。范围涵盖了HBase网络通信协议的核心概念、算法原理、数学模型、实际应用以及相关的开发和学习资源。本文将按照以下结构进行阐述:首先介绍核心概念与联系,包括RPC、Protobuf等在HBase网络通信中的作用和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明; 阅读详情

相关推荐

从 Hive 数仓出发,全面剖析 StarRocks、MySQL、HBase 的使用场景与区别

本文围绕Hive数仓,对比分析StarRocks、MySQL和HBase的核心特点与适用场景。Hive作为离线数仓底座,适合批处理计算;StarRocks是高性能实时分析引擎,支持秒级查询;MySQL适用于OLTP事务处理;HBase则擅长高并发海量数据存储。文章提出混合架构方案:MySQL作为业务源,Hive处理离线数据,StarRocks支撑实时分析,HBase存储行为日志等。通过合理组合这些组件,可构建高效稳定的数仓系统,满足不同业务场景需求。

weixin_44519124的博客 1958

HBase核心参数配置

hbase参数配置

Samooyou的博客 2337

HBase 原理深度剖析:从数据模型到存储机制

本文深入剖析了HBase分布式数据库的核心原理,主要包含以下内容:1) HBase是基于HDFS的列式存储NoSQL数据库,适用于海量数据随机读写场景;2) 详细解析HBase表结构设计,包括RowKey、列族等核心概念;3) 阐述HBase架构组成,包括HMaster、RegionServer等组件协作机制;4) 重点分析数据写入流程,采用WAL日志和MemStore内存缓冲的LSM-Tree存储模型。文章通过图表直观展示了HBase的表结构、整体架构和数据存储机制,帮助读者全面理解HBase的工作原理。

yitian881112的专栏 962

HBase Compaction

文章目录1. Compaction1.1. 基本原理1.2. Compaction 的核心作用1.3. Compaction 基本流程1.3.1. Compaction 触发时机1.3.2. 待合并 HFile 集合选择策略 1. Compaction Compaction是以Store为单位进行的 Compaction使读取延迟更加稳定,但是读取时间产生了很大的毛刺 Compaction 操作的主要源头来自flush操作 根据待合并HFile文件的选择策略可以得知,正在进行Compaction的HFi

初阳 2802

基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

前言 原理简介 预处理

Sophia2023的博客 1万+

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 666

hbase 性能调优

转载自 :hbase性能调优 一、服务端调优  1、参数配置    1)hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMe

风起于青萍之末,折秀于林 1235

NVIDIA B300 vs B200:详细解析与性能对决

详细解析 NVIDIA B300 整机)的性能,并与前代的 B200 进行对比。它不仅在核心计算能力(FP8)上实现了飞跃,更重要的是通过革命性的第二代 Transformer Engine 和第五代 NVLink 技术,彻底重塑了大规模 AI 模型训练和推理的效率与规模上限。其显存容量和带宽的巨大提升也为处理超大型模型和数据提供了坚实基础。与 B200 相比,B300 是一次全面的、代际性的性能跃升,特别适合那些需要处理最前沿、最复杂 AI 和科学计算任务的用户和组织。

2401_89353317的博客 3087

深入分析HBase Compaction机制

Compaction介绍 Compaction是buffer->flush->merge的Log-Structured Merge-Tree模型的关键操作,主要起到如下几个作用: 1)合并文件 2)清除删除、过期、多余版本的数据 3)提高读写数据的效率 Minor & Major Compaction的区别 1)Minor操作只用来做部分文件的合并操作以及包括minVersion=0并

Hadoop、HBase、ElasticSearch、Storm、Kafka、Spark 1万+

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 929

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 939

深入剖析HBase架构

HBase核心机制与优化策略摘要 HBase采用分布式架构,通过RegionServer集群处理读写请求,关键组件包括客户端、ZooKeeper、HMaster、RegionServer、WAL、MemStore和HFile。读写流程中,客户端先通过ZooKeeper定位目标Region位置,然后直接与对应RegionServer交互。写操作需先写WAL确保可靠性再写入MemStore;读操作依次查询MemStore、BlockCache和HFile。为提升性能,HBase采用BloomFilter、Blo

lrj41781196的博客 1566

YOLOv8-Pose NCNN Android部署优化实践

本文探讨了在Android设备上高效部署YOLOv8-Pose姿态检测模型的优化实践。通过修改Pose头部导出逻辑,分离后处理到C++端实现,并替换SiLU激活函数为ReLU,显著提升了计算效率。具体步骤包括模型结构优化、ONNX导出、NCNN转换与算子融合,最终在Android端实现了30FPS的稳定推理性能。项目提供了完整的优化思路和实现方案,对移动端AI应用开发具有参考价值。

FJN110的博客 325

Sqoop+HBase深度集成:两种导入模式原理剖析与实战

标准模式:通过HBase API逐条写入,适合小数据量和实时场景,但性能受限BulkLoad模式:生成HFile直接加载到HDFS,是生产环境海量数据导入的首选,速度提升可达10倍以上(注意兼容性)掌握这两种模式,你就能在面对不同量级的数据迁移任务时,游刃有余地选择最优方案。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1936

[系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向

娜璋AI安全之家于2020年8月18日开通,将专注于Python和安全技术,主要分享Web渗透、系统安全、CVE复现、威胁情报分析、人工智能、大数据分析、恶意代码检测等文章。真心想把自己近十年的所学所做所感分享出来,与大家一起进步。 系统安全系列作者将深入研究恶意样本分析、逆向分析、攻防实战等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过Cheat Engin

杨秀璋的专栏 2万+

还原 Windows 环境变量的默认值

有时候,我们可能需要还原环境变量的默认值,以修复可能的配置问题或恢复系统的正常运行。如果您只想还原某个特定的环境变量,可以跳过删除其他变量的步骤,仅删除需要还原的变量即可。在“环境变量”对话框中,继续向下滚动到“系统变量”部分。请注意,在执行以下步骤之前,您应该备份当前的环境变量设置,以便在需要时可以还原。在删除所有需要还原的环境变量后,点击“确定”按钮关闭“环境变量”对话框。在“用户变量”部分,选择需要还原的变量,然后点击“删除”按钮。在“高级”选项卡下方的“环境变量”部分,点击“环境变量”按钮。

PvDeveloper的博客 6342

深入HBase:原理剖析与优化实战

摘要:本文深入探讨了HBase分布式NoSQL数据库的原理、架构及优化实践。HBase基于HDFS构建,具有高可靠性、大规模数据处理和实时读写能力,广泛应用于社交媒体、物联网和金融等领域。文章详细解析了HBase的核心组件(HMaster、RegionServer等)、数据模型和存储机制,并通过实际案例展示了其在用户行为分析、设备监控和交易记录存储中的价值。重点介绍了表结构设计、内存配置、压缩技术等优化策略,使读写性能提升数倍。研究表明,针对业务特点合理配置HBase参数,能显著提高大数据处理效率。

东境物语 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hbase-BucketCache剖析

虽说hbase适合写多读少,但是hbase的读性能也是非常强悍的,hbase有如此好的读性能其中少不了BlockCache。BlockCache是regionserver级别的一种缓存,目前有三种实现方式:LruBlockCache、SlabCache和BucketCache,本文只对BucketCache的实现方式进行剖析。本文从BucketCache的内存模型、读写流程以及使用配置三方面进行说明。 BucketCache可以指定三种不同的存储介质:onHeap(java堆上内存)、of...

zfs_sir的博客 2033

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HBase(六): HBase体系结构剖析(上)

HBase(六): HBase体系结构剖析(上) Posted on 2016-09-10 19:37 天戈朱 阅读(3567) 评论(2) 编辑 收藏       HBase隶属于hadoop生态系统,它参考了谷歌的BigTable建模,实现的编程语言为 Java, 建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它仅能通过主键(row key)和主键的ran...

大JAVA解决方案 371

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Hbase基本原理剖析

每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。为了提升数据操作的效率,HBase Client会在内存中缓存“hbase:meta”和用户表Region的信息,当应用程序发起下一次数据操作时,HBase Client会首先从内存中获取这些信息;上图 RegionServer的数据存储结构中Region的各部分的说明如表 Region结构说明所示。

hello.reader 2万+

HBase优化与LSM树深度剖析技术博客

HBase基于LSM树实现了高效的写入与扩展能力,但优化需结合实际业务场景,合理调参、监控与建模。掌握其底层原理,有助于系统性提升HBase集群性能与稳定性。

IT技术学习与工作笔记分享 926

HBase架构深入剖析

一. 客户端client List item 整个HBase 集群的访问入口 ; 使用HBase RPC 机制 与 HMaster 和 HRegionServer 进行通信; 与HMaster 进行通信进行管理类操作; 与HRegionServer 进行数据读写类操作; 包含访问HBase 的接口 并维护Cache 来加快对于HBase 的访问 二.协调工具zookeeper 保证任何时候...

u012957549的博客 1651

HBase存储原理剖析笔记

慕课网《HBase 存储原理剖析》学习总结     说明:本文部分内容来自https://www.imooc.com/article/details/id/38969     学习视频:https://www.imooc.com/learn/996     视频案例演示源码:https://github.com/wind-free/springboot-HBaseDemo1....

dawf19439的博客 296

七、HBASE-01

七、HBASE-01 HBASE概述 1、HBase概念 ​ 官方网站:http://hbase.apache.org ​ HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBASE 技 术可在廉价 PC Server 上搭建起大规模结构化存储集群。 ​ HBase 的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能 够处理由成千上万的行和列所组成的大型数据。 2、HBase特点 (1)海量储存 ​ Hbase 适合存储 PB 级别的海量数据,在

不念人间朝暮的博客 153

Hbase整体架构剖析

概念 Hbase是一个开源的、面向列的、稀疏的、适合存储海量非结构化和半结构化的、具备高性能、高可靠性、可灵活扩展的、支持实时数据读写的分布式数据储存系统。 典型特征: 大表:一个表可以有上亿行,上百万个列; 面向列:面向列(族)的存储、检索和权限控制; 稀疏:表中为空(null)的列不占用存储空间。 数据类型单一:HBase 中的数据类型只有一种String 无模式:每...

youngflycode的博客 3200

hbase-put流程剖析

众所周知hbase是一个写性能非常优越的NOSQL,今天从源码中分析一下put操作到了region中是如何进行处理的。 region中处理put请求的大致流程如下图所示: 1)检查region状态并尝试获取region中读写锁中的读锁,1.检查读操作时是否可读。2.检查region是否rit状态,是则不允许read、split和merge操作。3.获取region读写...

zfs_sir的博客 1041
上一篇: linux磁盘读写性能监控
下一篇: HBase(六): HBase体系结构剖析(上)
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值